Почему primaryKey, autoIncerement игнорируются и ставится null в id?

Если при определении столбца с PRIMARY KEY или AUTO_INCREMENT свойство "id" устанавливается на NULL в PostgreSQL, есть несколько возможных причин для такого поведения.

1. Ошибочное определение столбца:
Возможно, при создании таблицы было допущено синтаксическая ошибка. Проверьте, что при создании столбца "id" было указано, что он является PRIMARY KEY или имеет AUTO_INCREMENT. В противном случае, база данных будет считать "id" обычным столбцом и будет присваивать ему значение NULL по умолчанию.

Пример правильного определения столбца с автоинкрементным PRIMARY KEY в PostgreSQL:

CREATE TABLE table_name (
id SERIAL PRIMARY KEY,
...
);

При данном определении столбца, PostgreSQL автоматически управляет значениями столбца "id" и гарантирует их уникальность.

2. Отключенная функция автоинкремента:
Другой возможной причиной является отключение функции автоинкремента. В PostgreSQL автоинкрементные столбцы требуют специальных объектов сериала (sequence objects), которые автоматически создаются и обслуживаются системой. Проверьте, что такая последовательность существует и корректно связана с таблицей.

Пример создания последовательности (sequence) и привязки к столбцу "id":

CREATE SEQUENCE table_name_id_seq;
ALTER TABLE table_name ALTER COLUMN id SET DEFAULT nextval('table_name_id_seq');

В случае, если последовательность была случайно удалена или неправильно связана с таблицей, столбец "id" будет получать значения NULL вместо автоматически генерируемых инкрементальных значений.

3. Нарушение ограничений:
Возможно, при добавлении данных в таблицу были нарушены ограничения, связанные с столбцом "id", такие как уникальность или внешние ключи. PostgreSQL может игнорировать значение автоинкрементного столбца при нарушении данных ограничений и присвоить столбцу "id" значение NULL.

Убедитесь, что в таблице нет других записей с NULL значением в столбце "id" или совпадающими значениями, которые должны быть уникальными. При нарушении ограничений, PostgreSQL может не сгенерировать новое значение для столбца "id" и оставить его пустым.

Учитывая эти возможные причины, рекомендуется проверить определение столбца "id", наличие и корректность последовательности (sequence) и наличие ограничений на таблицу. В случае необходимости, внесите необходимые изменения и повторите операцию, чтобы правильно задать значения PRIMARY KEY и AUTO_INCREMENT для столбца в PostgreSQL.