Синтаксическая ошибка Postgres с INSERT в TableFoo SELECT из TableFoo. - PullRequest
0 голосов
/ 05 декабря 2011

Postgres 8.1 на Linux.

Когда я пытаюсь:

   insert into card(
                    routine_id, page, row, col, show_card, flip_card
                 )
                    select (
                        999, 0, 0, 0, show_card, flip_card
                    ) from card   WHERE
                        routine_id = 89 AND page = 0  AND row = 0  AND col = 0
                ;

Я получаю:

ERROR:  column "routine_id" is of type integer but expression is of type record
HINT:  You will need to rewrite or cast the expression.

Селект возвращает один столбец под названием «запись строки», который выглядит следующим образом: (999,0,0,0,1,0)

Гугл предполагает, что мой синтаксис корректен в SQL, возможно, это отклонение Постгреса ??

Ответы [ 3 ]

1 голос
/ 05 декабря 2011

Снять скобки после SELECT.

INSERT INTO card
    (routine_id, page, row, col, show_card, flip_card)
    SELECT 999, 0, 0, 0, show_card, flip_card
        FROM card   
        WHERE routine_id = 89 AND page = 0  AND row = 0  AND col = 0;
0 голосов
/ 05 декабря 2011

Кажется, что, заключив скобки в столбцы, Postgres рассматривает это как «запись строки».Я предполагаю, что удаление круглых скобок заставит его работать, так как результирующий набор будет просто списком отдельных столбцов со значениями

0 голосов
/ 05 декабря 2011

снять скобки вокруг выделенной части:

insert into card (routine_id, page, row, col, show_card, flip_card)
    select 999, 0, 0, 0, show_card, flip_card
    from card
    WHERE routine_id = 89 AND page = 0  AND row = 0  AND col = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...