我尝试从一个xml字段中选择值,并将所选值插入另一个具有整数类型的表字段。
QUERY:
INSERT INTO "Match"
select
unnest(xpath('./game/id/text()', "File"))
FROM "Files"
选择正常,但是当我尝试插入时,则会发生错误:
SQL error:
ERROR: column "id" is of type integer but expression is of type xml
LINE 3: unnest(xpath('./game/id/text()', "File")),
HINT: You will need to rewrite or cast the expression.
当我尝试使用强制转换更改xml类型时,我收到另一个错误:
SQL error:
ERROR: cannot cast type xml to integer
LINE 3: cast(unnest(xpath('./game/id/text()', "File"))as integer)
当我尝试使用XMLSERIALIZE更改类型时,会发生另一个错误:
SQL error:
ERROR: argument of XMLSERIALIZE must not return a set
LINE 3: XMLSERIALIZE(CONTENT unnest(xpath('./game/id/text()', "File"...
如何将所选值插入另一个表?
答案 0 :(得分:3)
首先选择XML“id”节点中的文本:
zoomend
这将返回一个您不需要的数组,从而产生零行或多行:
xpath('game/id/text()', col1)
unnest(xpath('game/id/text()', col1))
允许您为表格中的每一行运行cross join lateral
:
unnest(xpath(...))
最后,Postgres无法将XML转换为数字。您需要中间转换为文本:
cross join lateral
unnest(xpath('game/id/text()', col1)) xp(id)