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,
我在使用 pgAdmin4 的 GUI 创建 SQL table 时遇到问题,我想使用生成的 CREATE TABLE
脚本来创建相同的 table 在另一个数据库中。
当我在我的新数据库中 运行 pgAdmin4 生成的 CREATE TABLE
脚本时,出现以下错误:
ERROR: relation "schema.TableName_Id_seq" does not exist
所以,问题似乎出在我创建的类型为 SERIAL
.
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,