无法找到postgres序列

时间:2016-02-21 19:18:31

标签: postgresql sequence

Hibernate无法找到我的序列,例外是:

Caused by: org.postgresql.util.PSQLException: 
              ERROR: relation "default.menuitem_menuitem_id_seq" does not exist

好的,我自己尝试并连接数据库:

mydb=# CREATE SEQUENCE "default.menuitem_menuitem_id_seq" INCREMENT BY 1 
               MINVALUE 1 NO MAXVALUE START WITH 1 NO CYCLE;
ERROR:  relation "default.menuitem_menuitem_id_seq" already exists
mydb=# select nextval('default.menuitem_menuitem_id_seq');
ERROR:  relation "default.menuitem_menuitem_id_seq" does not exist
LINE 1: select nextval('default.menuitem_menuitem_id_seq');

我有一个序列,它的名字是什么?

2 个答案:

答案 0 :(得分:1)

<强>解释

您所做的是您实际在当前架构中创建了名为"default.menuitem_menuitem_id_seq"的序列(可能是public)。

信息&amp;方法

default是ANSI SQL Standard和PostgreSQL中的保留关键字。

From the Postgres manual:

Key Word    PostgreSQL  SQL:2011    SQL:2008    SQL-92
DEFAULT     reserved    reserved    reserved    reserved

如果您希望架构中CREATE SEQUENCE的名称只有"default",那么您需要:

CREATE SEQUENCE "default".menuitem_menuitem_id_seq INCREMENT BY 1 
               MINVALUE 1 NO MAXVALUE START WITH 1 NO CYCLE;

此处并不真正需要您的序列名称附加引号。

答案 1 :(得分:1)

必须在每个限定符上单独引用:

CREATE SEQUENCE "default"."menuitem_menuitem_id_seq" 
INCREMENT BY 1 
MINVALUE 1 NO MAXVALUE 
START WITH 1 
NO CYCLE;

否则将在当前架构中创建名为default.menuitem_menuitem_id_seq的序列