Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 错误:关系“;schema.TableName_Id_seq";不存在-在新数据库中创建表时_Sql_Postgresql_Ddl_Create Table_Pgadmin 4 - Fatal编程技术网

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

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”

我遇到了一个问题,我使用pgAdmin4的GUI创建了一个SQL表,我想使用生成的
create table
脚本在另一个数据库中创建同一个表

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

错误:关系“schema.TableName\u Id\u seq”不存在

因此,问题似乎出在我创建为type
SERIAL
的自动递增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在创建该表时会在其周围隐式放置双引号。很高兴知道!