错误:关系“ schema.TableName_Id_seq”不存在-在新数据库中创建表时

问题描述 投票:0回答:1

我在使用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"。发生了什么不同?

sql postgresql ddl create-table pgadmin-4
1个回答
1
投票

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

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

  • ->您的服务器
  • ->您的数据库
  • ->您的架构
  • ->序列
  • ->右键单击TableName_Id_seq
  • ->选择“创建脚本”]
  • 这显示了用于创建此序列的脚本。在这种情况下,显示了以下内容:

-- 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,

© www.soinside.com 2019 - 2024. All rights reserved.