Postgresql 如何在INSERT查询中使用WHERE BEVER子句?
我有下表Postgresql 如何在INSERT查询中使用WHERE BEVER子句?,postgresql,Postgresql,我有下表 CREATE TABLE public.ad ( id integer NOT NULL DEFAULT nextval('ad_id_seq'::regclass), uuid uuid NOT NULL DEFAULT uuid_generate_v4(), created_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL, cmdb_
CREATE TABLE public.ad
(
id integer NOT NULL DEFAULT nextval('ad_id_seq'::regclass),
uuid uuid NOT NULL DEFAULT uuid_generate_v4(),
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
cmdb_id integer,
platform character varying(100),
bidfloor numeric(15,6),
views integer NOT NULL DEFAULT 1,
year integer,
month integer,
day integer,
CONSTRAINT ad_pkey PRIMARY KEY (id),
CONSTRAINT ad_cmdb_id_foreign FOREIGN KEY (cmdb_id)
REFERENCES public.cmdb (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ad_id_unique UNIQUE (uuid)
)
WITH (
OIDS=FALSE
);
在不太详细的情况下,这个表格记录了全国电子屏幕上广告的所有请求和印象。该表还用于生成报告,由+-5000万条记录组成
目前,在创建的时间戳上对报告进行过滤。您可以想象,对于+-5000万条记录,即使在created_at列上有一个索引,查询也会变慢。通过选择要在系统UI上请求数据的日期来生成报告
年、月和日列是我刚刚添加的新列,以提高报告效率。我希望系统以年、月和日为索引,而不是以日期为索引,所有单独的值
新添加的列仍然为空。我想运行一个查询,在created_at列位于两个日期之间时插入一个值。例如:
INSERT INTO ad (year) VALUES (2016) WHERE created_at BETWEEN '2016-01-01 00:00:00' AND '2016-12-31 23:59:59';
这当然不行。我在网上找不到INSERT语句使用where BEVER子句的任何内容。我还尝试使用子查询和WITH子句,使用generate_series生成2012年到2020年之间的一系列年份。这一切都没有成功。如果不想插入新行,应该更新表
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE column_name BETWEEN value1 AND value2;
否则您将有1亿行;) 如果不想插入新行,则应更新表
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE column_name BETWEEN value1 AND value2;
否则您将有1亿行;)
INSERT
插入新行,你想更新
现有行。INSERT
插入新行,你想更新
现有行。啊,妈的,我刚刚注意到了。我一直认为可以插入到现有行中。事实是,更新速度非常慢,超过5000万条记录,但为此我会找到另一个解决方案。谢谢您的回答。当然可以,但insert语句不是正确的方法,您必须更新行。为了提高性能,如果db逻辑结构允许,您可以将表拆分为多个子表。我一直认为可以插入到现有行中。事实是,更新速度非常慢,超过5000万条记录,但为此我会找到另一个解决方案。谢谢您的回答。当然可以,但insert语句不是正确的方法,您必须更新行。为了提高性能,如果db逻辑结构允许,可以将表拆分为多个子表