Sql Postgres语法错误,插入到TableFoo中,从TableFoo中选择。
linux上的Postgres 8.1 当我尝试时: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
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。