【发布时间】:2013-11-02 01:56:02
【问题描述】:
考虑下表,其中大约有 1000 万行
CREATE TABLE user
(
id bigint NOT NULL,
...
CONSTRAINT user_pk PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
)
然后我应用了以下更改
ALTER TABLE USER ADD COLUMN BUSINESS_ID VARCHAR2(50);
--OK
UPDATE USER SET BUSINESS_ID = ID; //~1500 sec
--OK
ALTER TABLE USER ALTER COLUMN BUSINESS_ID SET NOT NULL;
ERROR: column "business_id" contains null values
SQL state: 23502
这很奇怪,因为 id 列(已复制到 business_id 列)不能包含空值,因为它是主键,但要确保我检查它
select count(*) from USER where BUSINESS_ID is null
--0 records
我怀疑这是一个错误,只是想知道我是否遗漏了一些微不足道的东西
【问题讨论】:
-
我对为什么会发生这种情况一无所知。也许尝试使用显式转换的 UPDATE:
UPDATE "user" set business_id = ID::VARCHAR -
这可能与“user”是保留字这一事实有关,但我真的不知道。保留字列表:postgresql.org/docs/current/static/sql-keywords-appendix.html
-
Postgres 中没有
VARCHAR2类型。你的任务有问题.. -
@bma user 不是表的实际名称,我只是简化它来写问题
-
@Erwin Brandstetter 数据库是启用了 oracle 兼容性的 EnterpriseDB
标签: postgresql alter notnull enterprisedb