Помогите с копированием таблицы в 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 шт):

Автор решения: Lam3rok

Я так понимаю, что нужно было сделать что то вроде этого:

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)" уже существует.

Как сделать так что бы эта строка не добавлялась?

→ Ссылка
Автор решения: Lam3rok

Сделал как описал nexoma

если допустимо, создайте таблицу заново на основе первоисточника CREATE TABLE >>[Table to copy To] AS [Table to copy From] WITH NO DATA; – nexoma

Таблица создается, строки скопировал. Но вот нюанс... В обеих таблицах есть serial privary key? который теперь в первых двух строчках совпадает, как исправить?

введите сюда описание изображения

И подскажите, можно ли как то комплексно сравнивать эти строки?

→ Ссылка
Автор решения: newman

У вас же подсказка есть в ошибке. Скобки в SELECT лишние. Они объединяют выборку в один результат. У вас получается что вы в несколько столбцов пытаетесь вставить один.

Для понимания того что происходит сделайте два запроса

SELECT 'one', 'two';

и

SELECT ('one', 'two');

И посмотрите на результат. В первом случае у вас будет два столбца, а во втором один.

→ Ссылка