#sql #postgresql #hibernate
Вопрос:
Это запрос
insert into xyz_table (id_, column1, column2, column3, column4, column5) select a.id_, a.column1, a.column2, a.column3, a.column4, a.column5 from xyz_view a;
Мне нужно скопировать объемные данные из xyz_view в таблицу xyz_table. На данный момент в представлении нет генератора идентификаторов последовательности. Мне нужно указать id_, сгенерированный в определенной последовательности для каждой строки, которую я копирую из представления в таблицу.
Для целей тестирования мне нужно сделать это только с помощью sql-запроса postgres.
Примечание: В xyz_view нет столбца id_. Я явно добавил эти столбцы id_column на уровне запроса, чтобы последовательно указывать id_ для каждой строки в таблице xyz_table.
Если возможно, поривдайте мне рабочий запрос.
Комментарии:
1. Если столбец идентификатора не существует в вашем представлении и он сопоставлен с последовательным типом в вашей таблице, вы можете исключить его из запроса вставки и позволить базе данных автоматически увеличивать его.
Ответ №1:
Вы можете использовать row_number для создания последовательного идентификатора
insert into xyz_table (id_, column1, column2, column3, column4, column5) select row_number() OVER () AS id, a.column1, a.column2, a.column3, a.column4, a.column5 from xyz_view a;
Комментарии:
1. …или, если столбец идентификатора является последовательным, вы можете исключить его из своих запросов на вставку и позволить базе данных выполнять свою работу..?
2. да, но, похоже, пользователь хочет по одному на вставку
3. Спасибо вам, ребята, это сработало. не могли бы вы объяснить мне, что он делает?
4. он делает именно то, что вы просите, для каждой строки в представлении он добавляет свой номер строки, который отмечает ее положение в результирующем наборе. это искусство, если функция окна и имеет ряд дополнительных возможностей