在 Dbeaver 上创建 Postgres 表时不能使用“GENERATED ALWAYS AS IDENTITY”?

Posted

技术标签:

【中文标题】在 Dbeaver 上创建 Postgres 表时不能使用“GENERATED ALWAYS AS IDENTITY”?【英文标题】:Can't use "GENERATED ALWAYS AS IDENTITY" when creating Postgres tables on Dbeaver? 【发布时间】:2019-11-07 15:11:25 【问题描述】:

我正在使用 Dbeaver 创建 Postgres 数据库表,但在使用“GENERATED ALWAYS AS IDENTITY”作为递增的 id 值时出现语法错误。这很奇怪,因为我在本地主机上创建表时使用了完全相同的语法,并且没有任何语法错误或创建表的问题。

这是我尝试保存表时的 SQL 预览:

CREATE TABLE public.conversation (
    id bigint NOT NULL GENERATED ALWAYS AS IDENTITY,
    startdatetime timestamptz NOT NULL,
    enddatetime timestamptz NOT NULL,
    CONSTRAINT conversation_pk PRIMARY KEY (id)
);

当我尝试保存表格时,我收到“错误:'GENERATED' 处或附近的语法错误”。我认为这是正确的语法,因为 SQL 是由 Dbeaver 自己构建的,并且在创建本地数据库进行测试时工作正常?

【问题讨论】:

select version(); 向您展示了什么? @a_horse_with_no_name x86_64-pc-linux-gnu 上的 PostgreSQL 9.5.17,由 gcc 编译 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609, 64 位 身份列是在 Postgres 10 中引入的,您不能在(有些过时的)Postgres 9.5 中使用它们 @a_horse_with_no_name 那么我应该怎么做呢? 升级?或者使用 serial 就像 Gordon 展示的那样 【参考方案1】:

只需使用bigserial:

CREATE TABLE public.conversation (
    id bigserial primary key,
    startdatetime timestamptz NOT NULL,
    enddatetime timestamptz NOT NULL
);

【讨论】:

bigserial 的行为与generated always as identity 有点不同 @a_horse_with_no_name 。 . .如果由于某种原因 OP 不能使用 generated always as identity,它们就足够相似了。 绝对,这就是为什么我建议在我的 cmets 中使用它来解决问题本身。我只是想指出,存在细微差别。

以上是关于在 Dbeaver 上创建 Postgres 表时不能使用“GENERATED ALWAYS AS IDENTITY”?的主要内容,如果未能解决你的问题,请参考以下文章

DBeaver 在导入/导出时不保留主键

使用 postgres_fdw 创建外部表时翻译主机名时出错

DBeaver,从数据库 Postgres,表结构(属性)导出到文件 .txt

Postgres:当公共模式上存在表时,关系不存在错误

dbeaver创建的数据库文件哪里找?

在 postgres 8.1 中创建表时出错