基本的Postgres:如何在所有行中插入值?

时间:2014-12-11 21:59:13

标签: sql postgresql sql-update dml

很抱歉提出这样一个基本问题(我确定它是重复的)但是我已经进行了广泛的搜索,我无法解决如何做我需要的问题。我可能只是在搜索错误的关键字。

我有一个空列的数据库表。我想在该列中为所有行插入一个值。

我的表格如下:

 wkb_geometry | geometry(Polygon,4326) |
 id           | integer                |
 area         | real                   |

我想将wkb_geometry的区域插入所有行的区域列。

我知道如何计算和更新单个行,如下所示:

update inspire_parcel set area=(select st_area(wkb_geometry::geography) 
  from inspire_parcel where id=24045271) where id=24045271;

但是如何为所有行执行此操作?

如果它有所作为,我有很多行 - 超过2000万。

1 个答案:

答案 0 :(得分:2)

不需要select,只需使用函数的结果更新列,并省略where子句来更新所有行:

update inspire_parcel 
   set area = st_area(wkb_geometry::geography);

要避免覆盖现有值,只需使用适当的WHERE子句:

update inspire_parcel 
   set area = st_area(wkb_geometry::geography)
where area is null;

如果您只想为一行执行此操作,这也是正确的方法:

update inspire_parcel 
   set area = st_area(wkb_geometry::geography)
where id = 24045271;