Помогите с копированием таблицы в PostgreSQL
Есть две таблицы с одинаковым количеством столбцов

insert into qwe_asd (name, simp1, simp2, simp3, simp4, simp5, simp6, simp7, simp8, simp9, simp10, simp11, simp12, simp13, simp14, simp15, simp16) select (name, общее_недомогание, сухость_першение, Кашель_сухой_мокрый,
Голос_хриплый_беззвучный, боль_при_глотании, Головная_боль, температура_тела, Охриплость_афонией,
утомляемость_гортани, кашель_мокротой, дискомфорта_гортани, Сухой_кашель, Жжение_горле,
Кашель_обострении, Слизистая_густой_слизью, Откашливание_прожилками_крови) from symptoms;
Пытаюсь скопировать строчку и выдает:
[2022-12-14 13:54:16] [42601] ОШИБКА: INSERT содержит больше целевых столбцов, чем выражений
[2022-12-14 13:54:16] Подсказка: Источником данных является строка, включающая столько же столбцов, сколько требуется для INSERT. Вы намеренно использовали скобки?
[2022-12-14 13:54:16] Позиция: 28
Подскажите, что я неправильно делаю... Можно ли таблицу скопировать целиком? Можно ли скопировать построчно если разное количество столбцов?
Ответы (3 шт):
Я так понимаю, что нужно было сделать что то вроде этого:
insert into qwe_asd select * from symptoms;
Но происходит конфликт(ожидаемо):
[2022-12-14 14:38:55] [23505] ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "qwe_asd_pkey"
[2022-12-14 14:38:55] Подробности: Ключ "(newsickid)=(1)" уже существует.
Как сделать так что бы эта строка не добавлялась?
Сделал как описал nexoma
если допустимо, создайте таблицу заново на основе первоисточника CREATE TABLE >>[Table to copy To] AS [Table to copy From] WITH NO DATA; – nexoma
Таблица создается, строки скопировал. Но вот нюанс... В обеих таблицах есть serial privary key? который теперь в первых двух строчках совпадает, как исправить?
И подскажите, можно ли как то комплексно сравнивать эти строки?
У вас же подсказка есть в ошибке. Скобки в SELECT лишние. Они объединяют выборку в один результат. У вас получается что вы в несколько столбцов пытаетесь вставить один.
Для понимания того что происходит сделайте два запроса
SELECT 'one', 'two';
и
SELECT ('one', 'two');
И посмотрите на результат. В первом случае у вас будет два столбца, а во втором один.
