在 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”?的主要内容,如果未能解决你的问题,请参考以下文章
使用 postgres_fdw 创建外部表时翻译主机名时出错