Postgresql 填充表时出现多行错误

Postgresql 填充表时出现多行错误,postgresql,postgis,Postgresql,Postgis,我已使用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

我已使用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

有人知道我该怎么做吗?

您的一个子查询返回的行不止一行。因此,使用LIMIT 0,1或其他方法,每个子查询只能获得一个值


如果每列需要超过1个值,则应检查插入算法,并使用光标作为示例。

您的一个子查询返回超过1行。因此,使用LIMIT 0,1或其他方法,每个子查询只能获得一个值

如果每列需要1个以上的值,则应检查插入算法,并使用光标作为示例。

只需使用中的select查询,而不是值

不要插入id,因为它是串行的,会自动生成。

只需在中使用select查询,而不是值


不要插入id,因为它是串行的,会自动生成。

实际上,我的所有列都返回多行。我想编辑查询结果,并将查询添加到表中的问题中。你能帮我更多的忙吗?实际上我所有的列都返回不止一行。我想编辑查询结果,并将查询添加到表中的问题中。你能帮我更多吗?谢谢你,克洛多尔多。它对我有用。如果我想将查询泛化为包含所有rid值,应该怎么做?我想为ST_PixelAsPolygonsrast创建单独的列,为每个具有不同名称的rid创建1.val作为geomval1。列数超过1000,我无法手动执行。@f.ashouri如果您的列数超过1000,则说明您做得不对。创建另一个问题并解释您的数据,要求将其规范化。对不起,我有1000多行,每个行都有特定的rid。我想现在清楚了。我希望每个rid都有单独的geomval列。@f.ashouri然后您需要交叉表/枢轴。打开另一个问题。我刚问了另一个问题。谢谢你,克洛多尔多。它对我有用。如果我想将查询泛化为包含所有rid值,应该怎么做?我想为ST_PixelAsPolygonsrast创建单独的列,为每个具有不同名称的rid创建1.val作为geomval1。列数超过1000,我无法手动执行。@f.ashouri如果您的列数超过1000,则说明您做得不对。创建另一个问题并解释您的数据,要求将其规范化。对不起,我有1000多行,每个行都有特定的rid。我想现在清楚了。我希望每个rid都有单独的geomval列。@f.ashouri然后您需要交叉表/枢轴。打开另一个问题。我刚问了另一个问题。非常感谢。
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