Firebird - PGSQL 中的串行字段? [复制]

Posted

技术标签:

【中文标题】Firebird - PGSQL 中的串行字段? [复制]【英文标题】:Firebird - serial field as in PGSQL? [duplicate] 【发布时间】:2013-03-26 11:23:09 【问题描述】:

PGSQL 支持“串行”字段类型,转换为:

colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL

这使得标识符的生成非常容易。

在 Firebird 中,我只看到了基于触发器的解决方案。

是否可以在 Firebird 中使用相同的解决方案来避免为每个表创建触发器?

colname integer DEFAULT gen_id(generator, 1)

我现在没有安装 Firebird 版本来检查它,但也许有人知道答案。

或者我可以为此使用“我的功能”吗? 伪:

create function mygenid(genname) returns integer
begin
   return gen_id(genname);
end;

create table x(
   colname integer DEFAULT mygenid(generator, 1)

【问题讨论】:

为什么要避免触发器? 【参考方案1】:

Firebird 2.5 及更早版本仅支持生成 id 的触发器。 Firebird 3.0 引入了一个选项,可以在 DDL 表中使用generated by default as identity 指定它:

create table objects (
   id integer generated by default as identity primary key,
   name varchar(15)
);

这是为您创建触发器和相关序列的语法糖。

【讨论】:

谢谢!这很有趣,因为布尔字段只会出现在 FB3 中……但是什么时候发布呢? @durumdara 我不知道 Firebird 3 什么时候发布。它仍在开发中,第一个 alpha 版本尚未发布。

以上是关于Firebird - PGSQL 中的串行字段? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

多层下firebird自增长字段的处理

Firebird - 获取触发器内的所有修改字段

firebird中有两个数据库,将a库中的数据怎么导入到b库中

向 Firebird SQL 查询中的列添加小计

Firebird字段名称转义

使用 PL/pgSQL 在 PostgreSQL 中将多个字段作为记录返回