首页 > 解决方案 > 无法在 DEFAULT 表达式中使用列引用 - 尝试为自定义列名设置默认值

问题描述

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

我正在尝试将 ExampleID 转换为串行,因此它将使用此方法自动递增: 将主键 int 类型更改为串行

所以我在做

CREATE SEQUENCE example_id_seq MINVALUE 3

哪个工作正常,但随后

ALTER TABLE example ALTER "ExampleID" SET DEFAULT nextval('example_id_seq')

给出错误:

ERROR:  cannot use column reference in DEFAULT expression
SQL state: 0A000

但是,如果我删除“”并像这样放置 ExampleID:

ALTER TABLE example ALTER ExampleID SET DEFAULT nextval('example_id_seq')

我会得到错误

ERROR:  column "exampleid" of relation "example" does not exist
SQL state: 42703

标签: postgresql

解决方案


问题是与示例中的不同

ALTER TABLE example ALTER "ExampleID" SET DEFAULT nextval('example_id_seq')

我忘了把''放在序列名称旁边,所以它是

ALTER TABLE example ALTER "ExampleID" SET DEFAULT nextval(example_id_seq)

列引用是它误将列名引用的顺序。


推荐阅读