1

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

誰が私が何をすべきか知っていますか?

4

2 に答える 2

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 はシリアル番号であり、自動的に生成されるため、挿入しないでください。

于 2012-10-30T16:49:52.817 に答える
2

サブクエリの 1 つが複数の行を返します。したがって、LIMIT 0,1または何かを使用して、サブクエリごとに 1 つの値のみを取得します。

列ごとに複数の値が必要な場合は、挿入アルゴリズムを見直して、たとえばカーソルを使用する必要があります。

于 2012-10-30T16:46:07.723 に答える