无法在 DEFAULT 表达式中使用列引用 - 尝试为自定义列名称设置默认值

eli*_*236 8 postgresql

我有这个表,我使用 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)

列引用的问题是它错误地引用了列名引用的序列。


小智 7

要在通过 pgadmin 仪表板创建的列中添加默认字符串值,需要将字符串用单引号引起来。