postgresql - pg_get_serial_sequence 返回错误:关系“---”的列“---”不存在
问题描述
使用 Postgres 11.5,我试图手动将一些数据(具有特定键值)插入到具有 SERIAL PRIMARY KEY 字段的表中,然后调整 SERIAL 主键字段的顺序以返回高于当前最大值的值价值。但我遇到了一个错误。这是一个简单的表格
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_ID”不存在 SQL 状态:42703
我做错了什么,还是有更好的方法来做到这一点?可能值得注意的是,我确实有一些表,我的 setval 语句正在纠正表的顺序,但它不适用于所有表,并且不适用于这种简化的情况。
解决方案
就我而言,问题是相同的,但解决方案略有不同。我希望我的回答对其他人有所帮助。表名的小写没有帮助,因为应用程序使用第一个字符大写(Foo
而不是foo
)的表名。在 2004 年的一封电子邮件(链接)中,我得到了正确的提示:
SELECT PG_GET_SERIAL_SEQUENCE('"Foo"', 'Foo_id');
所以表名必须用双引号括起来,用单引号括起来。
推荐阅读
- reactjs - react-router 我可以在没有定义嵌套路由器的情况下拥有类似嵌套的路径吗?
- ios - 关于美国申请的出口合规性
- javascript - 在Javascript中查找字符串的父元素
- ruby-on-rails - Rails 路由:从 Mailer 或 Controller 更改 path_prefix
- html - 导航栏链接在 iOS 上不起作用的问题
- javascript - 如何使用云功能通过 webhook 将 Dialogflow 中的用户响应保存到 google cloud firestore
- google-bigquery - Google 数据流 - Apache Beam StreamingOptions.streaming 不起作用
- wordpress - Wordpress,自定义页面上的动态标题
- php - 我将如何选择所有类型的附件,如 pdf、gif、jpg,以链接的形式并在单击链接时下载文件
- c# - 无论选项卡标题如何,如何更改导航栏标题