在postgresql中我有一个表,我需要添加一个新列。原始表ddl正在下面:
CREATE TABLE survey.survey_response (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
survey_id uuid NOT NULL,
survey_question_id uuid NULL,
user_id varchar(256) NULL,
device_id varchar(256) NULL,
user_country varchar(100) NULL,
client_type varchar(100) NULL,
product_version varchar(100) NULL,
answer text NULL,
response_date timestamptz NOT NULL DEFAULT now(),
survey_category varchar(100) NULL,
tags varchar(250) NULL,
tracking_id uuid NULL,
CONSTRAINT survey_response_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
) ;
然后我改变表格以添加新列:
alter table survey.survey_response add column system_tags varchar(30) ;
但之后我发现我的instert声明无法更改这个新专栏,因为所有原始专栏都可以正常使用:
INSERT INTO survey.survey_response
(id, survey_id, user_id, tags, system_tags)
VALUES(uuid_generate_v4(), uuid_generate_v4(),'1123','dsfsd', 'dsfsd');
select * from survey.survey_response where user_id = '1123';
“tags”列包含插入的值,但system_tags保持为null。
我在我的本地postgreSQL 9.6中测试了上述场景,有关这种奇怪行为的任何想法?非常感谢
-----------------更新----------
我发现这个survey.survey_response表已根据月份进行分区,因此我的插入记录也将显示在survey.survey_response_y2017m12中。但是新的system_tags列也是NULL
CREATE TABLE survey.survey_response_y2017m12 (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
survey_id uuid NOT NULL,
survey_question_id uuid NULL,
user_id varchar(256) NULL,
device_id varchar(256) NULL,
user_country varchar(100) NULL,
client_type varchar(100) NULL,
product_version varchar(100) NULL,
answer text NULL,
response_date timestamptz NOT NULL DEFAULT now(),
survey_category varchar(100) NULL,
tags varchar(250) NULL,
tracking_id uuid NULL,
system_tags varchar(30) NULL,
CONSTRAINT survey_response_y2017m12_response_date_check CHECK (((response_date >= '2017-12-01'::date) AND (response_date < '2018-01-01'::date)))
)
INHERITS (survey.survey_response)
WITH (
OIDS=FALSE
);
如果我在非分区表中运行相同的场景,那么插入工作正常。
所以我需要对分区表的alter table进行任何特殊设置吗?