#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.