【发布时间】:2022-01-27 11:06:45
【问题描述】:
我一直在使用 PGAdmin 创建表,并且我有一个要自动添加的字段,PGAdmin 将创建一个序列。然后我想以某种方式编辑表格,所以我调出 CREATE 脚本,该脚本将包含这一行:
CREATE TABLE IF NOT EXISTS public.mytable
(
mykey bigint NOT NULL DEFAULT nextval('mytable_mykey_seq'::regclass),
总是,当我尝试执行此操作时,我会看到:
关系“mytable_mykey_seq”不存在
这真的很烦人,因为我可以在对象浏览器中看到它。我什至可以从对象窗口中拖入序列:
mykey bigint NOT NULL DEFAULT nextval('public.mytable_mykey_seq'::regclass),
得到:
关系“public.mytable_mykey_seq”不存在
如果我尝试,这也是我得到的:
mykey bigint NOT NULL DEFAULT nextval('"public".mytable_mykey_seq'::regclass),
或:
mykey bigint NOT NULL DEFAULT nextval('public."mytable_mykey_seq"'::regclass),
正如其他类似 SO 问题中所建议的那样。
每当我尝试为具有序列的表运行创建脚本时,都会发生这种情况。这是最小的用例脚本:
-- Table: public.mytable
-- DROP TABLE IF EXISTS public.mytable;
CREATE TABLE IF NOT EXISTS public.mytable
(
mykey integer NOT NULL DEFAULT nextval('mytable_mykey_seq'::regclass),
CONSTRAINT mytable_pkey PRIMARY KEY (mykey)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.mytable
OWNER to oikos;
“oikos”是我的登录名;我是唯一的用户。 PGAdmin 4 (6.3) 的最新版本。我相信 Postgres 版本 12.3。
我的问题是:a) 我在 PGAdmin 中做错了什么,如果有的话?* b) 正确的命名空间/约定/魔术词是什么PG能定位到这个序列吗?
* 好的,PGAdmin 所做的是预期没有序列,然后在脚本实际运行之前失败。因此,在尝试运行脚本之前和尝试失败之后,序列都存在。
所选答案将起作用,但您将无法按原样使用 CREATE SCRIPT 序列。
【问题讨论】:
标签: postgresql auto-increment pgadmin-4