Verknüpfen Sie eine Sequenz mit einer Identität in hsqldb

In PostgreSql kann man eine Sequenz definieren und sie als Primärschlüssel einer Tabelle verwenden. In HsqlDB kann immer noch eine Identitätsspalte mit automatischer Inkrementierung erstellt werden, die nicht mit einer benutzerdefinierten Sequenz verknüpft ist. Ist es möglich, eine benutzerdefinierte Sequenz als Generator einer Auto-Inkrement-Identitätsspalte in HsqlDB zu verwenden?

Beispiel sql in PostgreSql:

CREATE SEQUENCE seq_company_id START WITH 1; CREATE TABLE company ( id bigint PRIMARY KEY DEFAULT nextval('seq_company_id'), name varchar(128) NOT NULL CHECK (name <> '') ); 

Was ist das Äquivalent in HsqlDB?

Vielen Dank.

In Version 2.0 gibt es dafür keine direkte function. Sie können dafür einen BEFORE INSERT-Trigger in der Tabelle definieren:

 CREATE TABLE company ( id bigint PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '') ); CREATE TRIGGER trigg BEFORE INSERT ON company REFERENCING NEW ROW AS newrow FOR EACH ROW SET newrow.id = NEXT VALUE FOR seq_company_id; 

und insert, ohne einen vlue für id zu verwenden

INSERT INTO WERTE NULL, 'test'

Update für HSQLDB 2.1 und höher: Eine function wurde hinzugefügt, um dies zu unterstützen.

 CREATE SEQUENCE SEQU CREATE TABLE company ( id bigint GENERATED BY DEFAULT AS SEQUENCE SEQU PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '') ); 

Siehe das Handbuch unter CREATE TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation

Darüber hinaus verfügt 2.1 und höher über einen PostgreSQL-Kompatibilitätsmodus, in dem die PostgreSQL-statement CREATE TABLE akzeptiert wird, die auf die Sequenz in der DEFAULT-Klausel verweist und diese in die HSQLDB-Syntax übersetzt.