postgisデータベースにシェープファイルをインポートするには、ogr2ogrを使用します。ogr2ogrを正常にインストールし、pgsqlから次のコマンドを実行します。
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=user_1 password=***** dbname=imports" world_boundaries.shp
私が返すのはエラーメッセージです:
Unable to open datasource `world_boundaries.shp' with the following drivers: --a list of drivers follows (ESRI Shape File etc.)
また、シェープファイルの完全なパスを定義しようとしましたが、同じメッセージが表示されました。
また、私は実行しようとしました:
ogrinfo world_boundaries.shp
同じこと。
ファイルの権限に関する問題を修正した後、次のエラーが表示されます。
ERROR 1: AddGeometryColumn failed for layer world_boundaries, layer creation has failed.
ERROR 1: Terminating translation prematurely after failed
translation of layer world_boundaries (use -skipfailures to skip errors)
また、GUI shp2pgsqlからインポートしようとすると、次のエラーが表示されます。
ALTER TABLE "public".""
Failed in pgui_exec(): ERROR: permission denied for relation spatial_ref_sys
CONTEXT: SQL statement "SELECT SRID FROM spatial_ref_sys WHERE SRID = new_srid"
PL/pgSQL function addgeometrycolumn(character varying,character varying,character varying,character varying,integer,character varying,integer,boolean) line 50 at SQL statement
SQL statement "SELECT AddGeometryColumn('',$1,$2,$3,$4,$5,$6,$7)"
PL/pgSQL function addgeometrycolumn(character varying,character varying,character varying,integer,character varying,integer,boolean) line 5 at SQL statement
Shapefile import failed.
今回の問題は、このデータベースユーザーに十分な権限がないことでした。これはそれを修正しました:
GRANT ALL ON TABLE spatial_ref_sys TO my_user_name;
次のエラーメッセージ:
Warning 1: Geometry to be inserted is of type 3D Multi Polygon, whereas the layer geometry type is 3D Polygon.
Insertion is likely to fail
ERROR 1: INSERT command for new feature failed.
ERROR: Geometry type (MultiPolygon) does not match column type (Polygon)
したがって、次のパラメーターを使用する必要があるようです。-nlt MULTIPOLYGON
ERROR 1: PostgreSQL driver doesn't currently support database creation.
Please create database with the `createdb' command.
PostgreSQL driver failed to create PG:host=localhost user=my_user_name dbname=my_database password=password -nlt POLYGON
ただし、shp2pgsql GUIを使用してロードされます。
@elrobisのコメントにより、これが最終的に機能するようになりました。データベースに正しくロードされたデータ!
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=geonode dbname=geonode_imports password=geonode" -nlt GEOMETRY wld_bnd_adm0_gaul_2015.shp
-nln layername
引数を追加してみてください。おそらく-overwrite
、それが生き返るかどうかを確認するために。また、私があなたならsudo
、postgresのスーパーユーザーと一緒にogr2ogrを実行して、許可と特権を除外することを非常に確実にします。スクリプトが完成したら、厄介なアクセス許可と特権を確認できます。:)