В PostgreSql можно определить последовательность и использовать его в качестве первичного ключа таблицы. В HsqlDB можно все еще выполнить создание автоинкрементного столбца идентификационных данных, который не связывается ни с какой определяемой пользователем последовательностью. Действительно ли возможно использовать определяемую пользователем последовательность в качестве генератора автоинкрементного столбца идентификационных данных в HsqlDB?
Образец sql в 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 <> '')
);
Каков эквивалент в HsqlDB?
Спасибо.
В версии 2.0 нет прямой возможности для этого. Вы можете определить триггер BEFORE INSERT на таблице, чтобы сделать это:
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;
и вставить без использования vlue для id
INSERT INTO company VALUES null, 'test'
Обновление для HSQLDB 2.1 и более поздних версий: Для поддержки этого была добавлена функция.
CREATE SEQUENCE SEQU
CREATE TABLE company ( id bigint GENERATED BY DEFAULT AS SEQUENCE SEQU PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '') );
См. руководство в разделе CREATE TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation
Кроме того, 2.1 и более поздние версии имеют режим совместимости с PostgreSQL, в котором они принимают оператор PostgreSQL CREATE TABLE, ссылающийся на последовательность в предложении DEFAULT, и переводят его в синтаксис HSQLDB.