PostgreSQL является мощным, и вы только что были укушены расширенной функцией.
Ваш DDL вполне действителен, но совсем не так, как вы думаете.
Последовательность можно рассматривать как дополнительную транзакционную простую таблицу, используемую для генерации следующих значений для некоторых столбцов.
Что вы имели в виду сделать
Вы имели в виду, чтобы иметь поле идентификатор определяется таким образом, в соответствии с другой ответ:
id integer PRIMARY KEY default nextval('ownseq'),
Что вы сделали
Что вы сделали фактически определял вложенную структуру данных для вашей таблицы. Предположим, я создаю тестовую последовательность:
CREATE SEQUENCE testseq;
Тогда предположим, что я \d testseq
на Рв 9.1, я получаю:
Sequence "public.testseq"
Column | Type | Value
---------------+---------+---------------------
sequence_name | name | testseq
last_value | bigint | 1
start_value | bigint | 1
increment_by | bigint | 1
max_value | bigint | 9223372036854775807
min_value | bigint | 1
cache_value | bigint | 1
log_cnt | bigint | 0
is_cycled | boolean | f
is_called | boolean | f
Это определение типа используемой последовательности.
Теперь предположим, что я:
create table seqtest (test testseq, id serial);
я могу вставить в него:
INSERT INTO seqtest (id, test) values (default, '("testseq",3,4,1,133445,1,1,0,f,f)');
можно затем выбрать из него:
select * from seqtest;
test | id
----------------------------------+----
(testseq,3,4,1,133445,1,1,0,f,f) | 2
Кроме того, я могу расширить тест:
SELECT (test).* from seqtest;
select (test).* from seqtest;
sequence_name | last_value | start_value | increment_by | max_value | min_value
| cache_value | log_cnt | is_cycled | is_called
---------------+------------+-------------+--------------+-----------+----------
-+-------------+---------+-----------+-----------
| | | | |
| | | |
testseq | 3 | 4 | 1 | 133445 | 1
| 1 | 0 | f | f
(2 rows)
Такая вещь на самом деле очень мощная в PostgreSQL, но полная неожиданных углов (например, не нулевые и контрольные ограничения не работают должным образом с вложенными типами данных). Обычно я не рекомендую вложенные типы данных, но стоит знать, что PostgreSQL может это сделать и будет рад принять команды SQL, чтобы сделать это без предупреждения.
'первичный ключ' подразумевает' не null', поэтому последнее не нужно. –
И да, в зависимости от версии необходим листинг для 'regclass'. –
Этот синтаксис создает последовательность в инструкции «create table»? И можно ли установить минимальное значение и максимальное значение, например, исходное утверждение? –