PostGISで複数のテーブルを新しいテーブルにマージする


13

多数の個別のテーブルをPostGISの新しいテーブルにマージしたいと考えています。これは、シェープファイルデータを操作するときの簡単なタスクですが、PostGISでこれを行う方法はわかりません。どんな助けも大歓迎です。Appendを使用すると思いますが、どこから始めてもわかりません。

回答:


17

(プリフライトチェック:属性はすべての元のテーブルで同一ですか?ジオメトリタイプはすべてのテーブルでまったく同じですか?)

あなたはどちらか

  1. 最初に(空の)テーブルを作成し、次にINSERT INTO ... SELECT ... FROMを使用して、元の各テーブルからマージされたテーブルにすべてのデータを取得します。
  2. 1つの大きなUNIONステートメントから新しいテーブルを作成します。

1の場合:

CREATE TABLE merged (id serial primary key, attrib1 integer, attrib2 varchar(15),....);
SELECT AddGeometryColumn('merged','geom',<SRID>,'<FEATURE_TYPE>,'XY');
INSERT INTO merged (attrib1, attrib2, ...., geom) SELECT attribA, attribB,...,geom FROM table_1;
INSERT INTO merged (attrib1, attrib2, ...., geom) SELECT attribA, attribB,...,geom FROM table_2;

等々...

オプション2の場合:

CREATE TABLE merged AS( 
SELECT attribA, attribB,...,geom FROM table_1
UNION 
SELECT attribA, attribB,...,geom FROM table_2
UNION
.... 
);
SELECT Populate_Geometry_Columns('merged'::regclass);

HTH、ミカ


ありがとう、ミカ、これを試してみます。はい、すべてのテーブルは同じ属性を持ち、同じジオメトリタイプです。おかげで再び...
ライアンガーネット

試しましたが、XYに関連するエラーが発生しています。そこで何を使うべきかわからないので、間違ったものを入れていることを知っています。これが私のクエリと出力レスポンスです。どんな助けも素晴らしいでしょう。
ライアンガーネット

CREATE TABLE pbear_pp(idシリアル主キー、エンティティ名varchar(40)); SELECT AddGeometryColumn( 'pbear_pp'、 'geom'、 '-1'、 'polygon'、 'XY'); INSERT INTO pbear_pp(entityname、geom)SELECT entityname、geom FROM nts250k.nts250k_​​043e_poly; INSERT INTO pbear_pp(entityname、geom)SELECT entityname、geom FROM nts250k.nts250k_​​043f_poly; ETC ETC ...
ライアンガーネット

注意:暗黙のシーケンスのシリアル列の"pbear_pp_id_seq"を作成しますCREATE TABLEのは"pbear_pp.id" NOTICE:整数のための無効な入力構文:テーブルに対して"pbear_pp" ERROR暗黙のインデックス"pbear_pp_pkey"を作成しますTABLE / PRIMARY KEYをCREATE "XY"を
ライアンガーネット

1
引数が次元を指定するため、「XY」の代わりに2を使用します。
lynxlynxlynx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.