gpt4 book ai didi

sql - 如何防止我的 SQL 子查询在 PostgreSQL 中缓存数据?

转载 作者:行者123 更新时间:2023-11-29 12:34:35 24 4
gpt4 key购买 nike

我正在尝试插入测试数据来测试 postgresql partionning , 使用 Postgresql 11。

这是我的表格:

CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
);

这是我插入测试数据的语句:

explain insert into measurement(
city_id,
logdate,
peaktemp,
unitsales
)
select
(
select (random() * 10000)::int + (generator*0) as city_id
),
(
select
*
from
(select * from generate_series('2006-01-01'::timestamp,
'2006-12-31'::timestamp,
'1 day')) as rng
order by
random()
limit 1
) as logdate,
(
select (random() * 10000)::int + (generator*0) as peaktemp
),
(
select (random() * 10000)::int + (generator*0) as unitsales
)
from generate_series(1, 1000) as generator

问题是:当我运行这个语句时,生成字段 logdate 的选择子查询似乎被缓存了,表 measurement 包含该字段的单个值日志日期

所以,如果我运行以下查询:

select distinct(logdate)
from measurement

我只得到一个值:2006-02-10

如何防止缓存副作用?

最佳答案

如您所见,ORDER BY为子查询计算一次,这样对于在外部查询中生成的每一行,所选行将是相同的。因此,您将无法使用子选择和 ORDER BY实现你的目标,即使你调用random() .

试试这个:

SELECT
(random() * 10000)::int AS city_id,
'2006-01-01'::timestamp + random() * ('2006-12-31'::timestamp - '2006-01-01'::timestamp) AS logdate,
(random() * 10000)::int AS peaktemp,
(random() * 10000)::int AS unitsales
FROM
generate_series(1,1000);

我不确定您的要求是什么,但我认为您不需要 1) 一堆子选择或 2) 所有对 generator*0 的引用,所以我也删除了它们。

披露:我为 EnterpriseDB (EDB) 工作

关于sql - 如何防止我的 SQL 子查询在 PostgreSQL 中缓存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58564890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com