我在使用pgAdmin4的GUI创建SQL表时遇到了一个问题,我想使用生成的CREATE TABLE
脚本在另一个数据库中创建该表。
当我在新数据库中运行pgAdmin4生成的CREATE TABLE
脚本时,出现以下错误:
错误:关系“ schema.TableName_Id_seq”不存在
因此,问题似乎出在我创建为SERIAL
类型的自动递增ID列上。
[pgAdmin4提供的CREATE TABLE
脚本:
-- Table: myschema.TableName
-- DROP TABLE myschema."TableName";
CREATE TABLE myschema."TableName"
(
"Id" integer NOT NULL DEFAULT nextval('myschema."TableName_Id_seq"'::regclass),
/* Other columns here */
CONSTRAINT "TableName_pkey" PRIMARY KEY ("Id")
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE myschema."TableName"
OWNER to JoshuaSchlichting;
为什么CREATE TABLE
脚本不能在另一个数据库中使用?在创建该表之前,原始数据库中不存在关系"schema.TableName_Id_seq"
。发生了什么不同?
pgAdmin4提供的DDL脚本不完整。创建表时,由于为sequence列选择了SERIAL
类型,因此隐式创建了Id
。
您可以使用pgAdmin4找到这个新创建的序列。为此,请转到
这显示了用于创建此序列的脚本。在这种情况下,显示了以下内容:
-- SEQUENCE: myschema.TableName -- DROP SEQUENCE myschema."TableName"; CREATE SEQUENCE myschema."TableName" INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;
可以通过更改用于在
CREATE SEQUENCE
脚本中创建Id
列的代码行来避免使用CREATE TABLE
脚本。下面的示例:
原始行:"Id" integer NOT NULL DEFAULT nextval('myschema."TableName_Id_seq"'::regclass),
更改为:"Id" SERIAL NOT NULL,