ERROR: relation "schema.TableName_Id_seq" does not exist - when creating table in a new database

ERROR: relation "schema.TableName_Id_seq" does not exist - when creating table in a new database

我在使用 pgAdmin4 的 GUI 创建 SQL table 时遇到问题,我想使用生成的 CREATE TABLE 脚本来创建相同的 table 在另一个数据库中。

当我在我的新数据库中 运行 pgAdmin4 生成的 CREATE TABLE 脚本时,出现以下错误:

ERROR: relation "schema.TableName_Id_seq" does not exist

所以,问题似乎出在我创建的类型为 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 脚本不能在另一个数据库中使用?在创建 table 之前,原始数据库中不存在关系 "schema.TableName_Id_seq"。有什么不一样的吗?

pgAdmin4提供的DDL脚本不完整。创建 table 时,由于 Id 列的 SERIAL 类型为 select,因此隐式创建了 sequence

您可以使用 pgAdmin4 找到这个新创建的序列。为此,请转到

  • -> 你的服务器
  • -> 你的数据库
  • -> 你的架构
  • -> 序列
  • ->右击TableName_Id_seq
  • -> 选择 "Create script"

这揭示了用于创建此序列的脚本。在这种情况下,揭示了以下内容:

-- SEQUENCE: myschema.TableName

-- DROP SEQUENCE myschema."TableName";

CREATE SEQUENCE myschema."TableName"
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 2147483647
    CACHE 1;

可以通过更改用于在 CREATE TABLE 脚本中创建 Id 列的代码行来避免使用 CREATE SEQUENCE 脚本。下面的示例:

原文: "Id" integer NOT NULL DEFAULT nextval('myschema."TableName_Id_seq"'::regclass),

更改为:"Id" SERIAL NOT NULL,