Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Postgresql pg“get”序列返回错误:列---&引用;“关系的定义”---&引用;不存在_Postgresql_Postgresql 11 - Fatal编程技术网

Postgresql pg“get”序列返回错误:列---&引用;“关系的定义”---&引用;不存在

Postgresql pg“get”序列返回错误:列---&引用;“关系的定义”---&引用;不存在,postgresql,postgresql-11,Postgresql,Postgresql 11,使用Postgres 11.5,我试图手动将一些数据(具有特定键值)插入到具有串行主键字段的表中,然后调整串行主键字段的顺序,以返回高于当前最大值的值。但我有个错误。这是一张简单的桌子 CREATE TABLE FOO ( FOO_ID SERIAL PRIMARY KEY, VAL INTEGER ); INSERT INTO FOO (VAL) VALUES (4); SELECT * FROM FOO; -- returns one record with a FOO_I

使用Postgres 11.5,我试图手动将一些数据(具有特定键值)插入到具有串行主键字段的表中,然后调整串行主键字段的顺序,以返回高于当前最大值的值。但我有个错误。这是一张简单的桌子

CREATE TABLE FOO (
  FOO_ID SERIAL PRIMARY KEY,
  VAL     INTEGER
);

INSERT INTO FOO (VAL) VALUES (4);
SELECT * FROM FOO;
-- returns one record with a FOO_ID of 1, as expected

INSERT INTO FOO (FOO_ID, VAL) VALUES (5, 5);
SELECT * FROM FOO WHERE VAL=5;
-- returns one record with a FOO_ID of 5, as expected
接下来,我想更新序列,这样我接下来的几个没有显式FOO_ID的插入不会与ID为5的插入冲突:

SELECT setval(pg_get_serial_sequence('FOO', 'FOO_ID'), (SELECT COALESCE(MAX(FOO_ID), 0) FROM FOO));
但上述SQL的这一部分失败了:

SELECT pg_get_serial_sequence('FOO', 'FOO_ID');
出现此错误时: 错误:关系“FOO”的列“FOO\u ID”不存在 SQL状态:42703

我做错了什么,或者有更好的方法吗?
可能值得注意的是,我确实有一些表,我的setval语句正在更正这些表的顺序,但它不能在所有表上工作,也不能在这个简化的情况下工作。

我刚刚发现这是一个区分大小写的问题

SELECT pg_get_serial_sequence('foo', 'foo_id');

工作

在我的案例中,问题是相同的,但解决方案略有不同。我希望我的回答能帮助别人。表名的小写字母没有帮助,因为应用程序使用第一个字符大写的表名(
Foo
,而不是
Foo
)。在2004年()的一封电子邮件中,我得到了正确的提示:

SELECT PG_GET_SERIAL_SEQUENCE('"Foo"', 'Foo_id');
因此,表名必须用双引号括起来,并用单引号括起来