保存查询结果而不将其追加到PostgreSQL中的现有表

保存查询结果而不将其追加到PostgreSQL中的现有表,sql,postgresql,insert,Sql,Postgresql,Insert,我有一个表road,其中包含gid和geom列,还有一个空列distance。 使用以下脚本: INSERT INTO road (distance) SELECT ST_length(a.geom::geography,true)/1000 FROM road a; 我只会将结果附加到现有的road表中。我想知道是否有办法从distance列的开头保存我的查询结果,以便它们与现有的gid相对应 您可能正在寻找更新 update road set distance = ST_length

我有一个表road,其中包含
gid
geom
列,还有一个空列
distance
。 使用以下脚本:

INSERT INTO road (distance) 
SELECT ST_length(a.geom::geography,true)/1000 
FROM road a;

我只会将结果附加到现有的road表中。我想知道是否有办法从
distance
列的开头保存我的查询结果,以便它们与现有的
gid
相对应

您可能正在寻找更新

update road set distance =  ST_length(geom::geography,true)/1000;
在事务中尝试此操作,以便能够回滚:

begin;
    update road set distance =  ST_length(geom::geography,true)/1000;
    select * from road; --to check the result
rollback; -- or commit if you like it

1.第一个建议没有给出正确的结果:事实上,我所有的距离单元格都显示相同的结果,这与我直接使用查询
SELECT ST_length(a.geom::geography,true)/1000
(处理时间也很长)得到的结果不一致。2.第二个显示错误消息error:“select”第3行或其附近出现语法错误:select*from road--要检查结果^SQL state:42601 Character:851和2都是一个建议。您可能会一个接一个地运行它们(没有半命令,因此出现语法错误),这很遗憾。第一条语句应该告诉你这个想法,第二条应该说明如何实现它…在1000后面加一个分号,将解决你的语法错误begin;更新道路集距离=ST_长度(geom::geography,true)/1000;从道路中选择*--检查结果回滚;
update
命令今天起作用。我想刷新我的桌子是个问题;谢谢你的帮助