我有这个表,我使用 pgLoader 从 MySQL 迁移而来
CREATE TABLE IF NOT EXISTS schema.example
(
"ExampleID" integer NOT NULL,
"Name" character varying(255) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT "idx_43997_PRIMARY" PRIMARY KEY ("ExampleID"),
)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将 ExampleID 转换为序列号,以便它将使用以下方法自动递增: 将主键 int 类型更改为序列号
所以我正在做
CREATE SEQUENCE example_id_seq MINVALUE 3
Run Code Online (Sandbox Code Playgroud)
效果很好,但是然后
ALTER TABLE example ALTER "ExampleID" SET DEFAULT nextval('example_id_seq')
Run Code Online (Sandbox Code Playgroud)
给出错误:
ERROR: cannot use column reference in DEFAULT expression
SQL state: 0A000
Run Code Online (Sandbox Code Playgroud)
但是如果我删除“”并像这样输入ExampleID:
ALTER TABLE example ALTER ExampleID SET DEFAULT nextval('example_id_seq')
Run Code Online (Sandbox Code Playgroud)
我会得到错误
ERROR: column "exampleid" of relation "example" does not exist
SQL state: 42703
Run Code Online (Sandbox Code Playgroud)
eli*_*236 14
问题是与示例中不同
ALTER TABLE example ALTER "ExampleID" SET DEFAULT nextval('example_id_seq')
Run Code Online (Sandbox Code Playgroud)
我忘了在序列名称旁边加上“”,所以它是
ALTER TABLE example ALTER "ExampleID" SET DEFAULT nextval(example_id_seq)
Run Code Online (Sandbox Code Playgroud)
列引用的问题是它错误地引用了列名引用的序列。