Почему SERIAL и GENERATE ВСЕГДА запрашивают идентификатор как идентификатор, предоставляемый пользователем, в postgresql?

#sql #postgresql-12

#sql #postgresql-12

Вопрос:

Я пробовал использовать SERIAL и GENERATED ALWAYS AS IDENTITY , но всегда получал ошибку при попытке вставить в любую таблицу, в которой они используются.

Пример:

 CREATE TABLE foo (  id SERIAL NOT NULL PRIMARY KEY,  name VARCHAR(255) NOT NULL ); CREATE TABLE bar (  id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,  name VARCHAR(255) NOT NULL );  INSERT INTO foo VALUES ('JOHN'); INSERT INTO bar VALUES ('JANE');  

Я бы получил invalid input syntax for type integer: "John" при вставке в foo и invalid input syntax for type integer: "Jane" при вставке в панель. Насколько я знаю, он должен автоматически заполнять «идентификатор», начиная с 1, и требовать только «имя» из INSERT INTO инструкции.

Я что-то сделал не так?

Комментарии:

1. ВСТАВИТЬ В строку(имя) ЗНАЧЕНИЯ («ДЖЕЙН»);

2. ^— Это или INSERT INTO foo VALUES(DEFAULT, 'JOHN')

3. Спасибо! Не могу поверить, что я забыл что-то подобное…