我使用 create table 并使用以下列创建了一个表:
create table myschema.mytable(
id serial PRIMARY KEY,
row_num integer,
col_num integer,
pix_centroid geometry,
pix_val double precision
)
当我尝试填充它时:
insert into pixelbased (id, row_num, col_num, pix_centroid, pix_val)
values (
DEFAULT,
(select((ST_PixelAsPolygons(rast, 1)).x) from mytable where rid=3),
(select((ST_PixelAsPolygons(rast, 1)).x) from mytable where rid=3),
(select(ST_Centroid((ST_PixelAsPolygons(rast, 1)).geom)) from rwanda8 where rid=3),
(select(ST_PixelAsPolygons(rast, 1)).val from mytable where rid=3)
)
我遇到以下错误:
错误:用作表达式的子查询返回多行。
我知道,因为每列都有多行,所以有这样的错误是有意义的。但我真的需要按照提到的方式计算所有列。谁知道我该怎么办? 实际上我想在表中插入以下查询的结果:
select
(ST_PixelAsPolygons(rast, 1)).val as geomval1,
(ST_PixelAsPolygons(rast, 1)).x as X,
(ST_PixelAsPolygons(rast, 1)).y as Y,
(ST_Centroid((ST_PixelAsPolygons(rast, 1)).geom)) as geom
from rwanda8
where rid=3
任何人都知道我该怎么做?
答案 0 :(得分:2)
您的一个子查询返回的行数超过1行。因此,使用LIMIT 0,1
或其他东西来获得每个子查询只有一个值。
如果每列需要的值超过1,则应查看插入算法并使用游标。
答案 1 :(得分:2)
只需使用select
查询而不是values
insert into pixelbased (row_num, col_num, pix_centroid, pix_val)
select
(ST_PixelAsPolygons(rast, 1)).val as geomval1,
(ST_PixelAsPolygons(rast, 1)).x as X,
(ST_PixelAsPolygons(rast, 1)).y as Y,
(ST_Centroid((ST_PixelAsPolygons(rast, 1)).geom)) as geom
from rwanda8 where rid=3
不要插入id,因为它是一个序列号并且会自行生成。