Как вставить значения в таблицу, если в ней есть первичный ключ для поля id?

#sql #postgresql #constraints

#sql #postgresql #ограничения

Вопрос:

У меня проблемы, у меня есть таблица с именем my_table)

 id name
1 A
2 B
3 C
  

и я хочу вставить top 2, чтобы значения автоматически увеличивались следующим образом

 insert into my_table (name) values (A), (B); 
  

Возможно ли это в postgressql?

Может быть, у меня должен быть count() 1, затем count() 2 здесь

 insert into my_table (id, name) values (count(*)   1, A), (count(*)   2, B);
  

или что-то в этом
роде, потому что мой идентификатор имеет ограничение

 BIGSEREIAL PRIMARY KEY NOT NULL
  

И я не могу добавлять значения, не получая последний идентификатор в таблице.

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

1. Если id определено как bigserial , то ваш первый оператор INSERT будет делать именно то, что вы хотите

2. Вероятно, вы автоматически получите ID 1 для A и ID 2 для B, когда ваша таблица пуста, но я не думаю, что это гарантируется вашим оператором вставки нескольких строк. Вместо этого вам нужно будет выполнить два оператора, чтобы убедиться, что A получает меньший идентификатор, чем B: insert into my_table (name) values (A); , затем insert into my_table (name) values (B); .

Ответ №1:

Вы можете сделать:

 create table my_table (
  id int not null generated always as identity,
  name varchar(10) not null
);

insert into my_table (name) values ('A'), ('B');
  

Затем:

 select * from my_table;
  

Результат:

 id  name
--  ----
 1  A   
 2  B   
  

Смотрите Пример выполнения в db<>fiddle.