Sql 错误:关系“;schema.TableName_Id_seq";不存在-在新数据库中创建表时
我遇到了一个问题,我使用pgAdmin4的GUI创建了一个SQL表,我想使用生成的Sql 错误:关系“;schema.TableName_Id_seq";不存在-在新数据库中创建表时,sql,postgresql,ddl,create-table,pgadmin-4,Sql,Postgresql,Ddl,Create Table,Pgadmin 4,我遇到了一个问题,我使用pgAdmin4的GUI创建了一个SQL表,我想使用生成的create table脚本在另一个数据库中创建同一个表 在新数据库中运行pgAdmin4生成的CREATE TABLE脚本时,出现以下错误: 错误:关系“schema.TableName\u Id\u seq”不存在 因此,问题似乎出在我创建为typeSERIAL的自动递增id列上 pgAdmin4提供的创建表脚本: --表:myschema.TableName --删除表myschema.“TableName”
create table
脚本在另一个数据库中创建同一个表
在新数据库中运行pgAdmin4生成的CREATE TABLE
脚本时,出现以下错误:
错误:关系“schema.TableName\u Id\u seq”不存在
因此,问题似乎出在我创建为typeSERIAL
的自动递增id列上
pgAdmin4提供的创建表脚本:
--表:myschema.TableName
--删除表myschema.“TableName”;
创建表myschema。“表名”
(
“Id”整数不为空默认值nextval('myschema.“TableName\u Id\u seq'::regclass),
/*这里还有其他专栏*/
约束“TableName_pkey”主键(“Id”)
)
与(
OID=错误
)
表空间pg_默认值;
更改表格myschema。“表格名称”
JoshuaSchlichting的所有者;
为什么不能在另一个数据库中使用创建表脚本?在创建该表之前,原始数据库中不存在schema.TableName\u Id\u seq“
关系。发生了什么不同?pgAdmin4提供的DDL脚本不完整。创建表时,由于为Id
列选择了SERIAL
类型,因此隐式创建了
您可以使用pgAdmin4找到这个新创建的序列。要执行此操作,请转到
- ->你的服务器
- ->你的数据库
- ->您的模式
- ->序列
- ->右键单击TableName\u Id\u seq
- ->选择“创建脚本”
这将显示用于创建此序列的脚本。在本例中,发现了以下情况:
--序列:myschema.TableName
--删除序列myschema.“TableName”;
创建序列myschema.“表名”
增量1
开始1
最小值1
最大值2147483647
缓存1;
通过更改CREATE TABLE
脚本中用于创建Id
列的代码行,可以避免使用CREATE SEQUENCE
脚本。示例如下:
原始行:
“Id”整数非空默认值nextval('myschema.“TableName\u Id\u seq'::regclass),
更改为:“Id”SERIAL NOT NULL,
pgAdmin4提供的DDL脚本不完整。创建表时,由于为Id
列选择了SERIAL
类型,因此隐式创建了
您可以使用pgAdmin4找到这个新创建的序列。要执行此操作,请转到
- ->你的服务器
- ->你的数据库
- ->您的模式
- ->序列
- ->右键单击TableName\u Id\u seq
- ->选择“创建脚本”
这将显示用于创建此序列的脚本。在本例中,发现了以下情况:
--序列:myschema.TableName
--删除序列myschema.“TableName”;
创建序列myschema.“表名”
增量1
开始1
最小值1
最大值2147483647
缓存1;
通过更改CREATE TABLE
脚本中用于创建Id
列的代码行,可以避免使用CREATE SEQUENCE
脚本。示例如下:
原始行:
“Id”整数非空默认值nextval('myschema.“TableName\u Id\u seq'::regclass),
更改为:“Id”SERIAL NOT NULL,
与您的问题无关,但是:您应该真正避免使用那些可怕的带引号的标识符。他们的麻烦远比他们值得的多@一匹没有名字的马我同意!上面的脚本是由pgAdmin4和/或PostgreSQL本身生成的,不是我!脚本只反映了以前所做的事情。有一次,有人用可怕的带引号的标识符运行CREATE表。你知道吗,我从你的链接中注意到,那些双引号很可能存在,因为表名中有大写字母。我没有意识到这是正在发生的事情。感谢大家分享,@a_horse_with_no_name.@a_horse_with_no_name该表最初是通过pgAdmin4 GUI创建的,而不是通过手动编写的CREATE table
脚本创建的。编辑:我刚刚创建了一个新表,并使用pgAdmin4对其进行了测试。果然,如果您在创建表时使用大写字母,那么pgAdmin4在创建该表时会在其周围隐式放置双引号。很高兴知道!与您的问题无关,但是:您应该真正避免那些可怕的引用标识符。他们的麻烦远比他们值得的多@一匹没有名字的马我同意!上面的脚本是由pgAdmin4和/或PostgreSQL本身生成的,不是我!脚本只反映了以前所做的事情。有一次,有人用可怕的带引号的标识符运行CREATE表。你知道吗,我从你的链接中注意到,那些双引号很可能存在,因为表名中有大写字母。我没有意识到这是正在发生的事情。感谢大家分享,@a_horse_with_no_name.@a_horse_with_no_name该表最初是通过pgAdmin4 GUI创建的,而不是通过手动编写的CREATE table
脚本创建的。编辑:我刚刚创建了一个新表,并使用pgAdmin4对其进行了测试。果然,如果您在创建表时使用大写字母,那么pgAdmin4在创建该表时会在其周围隐式放置双引号。很高兴知道!