Sql Postgres语法错误,插入到TableFoo中,从TableFoo中选择。

Sql Postgres语法错误,插入到TableFoo中,从TableFoo中选择。,sql,postgresql,insert,Sql,Postgresql,Insert,linux上的Postgres 8.1 当我尝试时: insert into card( routine_id, page, row, col, show_card, flip_card ) select ( 999, 0, 0, 0, show_card, flip_card ) from

linux上的Postgres 8.1

当我尝试时:

   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.
select返回一个名为“row record”的单列,如下所示:(999,0,0,1,0)


谷歌搜索表明我的语法是SQL正确的,也许这是Postgres的偏差???

删除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;

似乎在列中加上括号会使Postgres将其视为“行记录”。我可以想象,删除括号将使其工作,因为结果集将只是一个具有值的单独列的列表

将括号放在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;

这不会直接影响您的问题,但是:8.1已过时且不受支持;事实上,8.2的生命周期结束公告是在今天发布的,因此您的两个版本落后于受支持的版本,五个版本落后于当前版本。您应该考虑至少更新到8.3或9.1。