ฉันต้องการใช้ ogr2ogr เพื่อนำเข้า Shapefile ในฐานข้อมูล postgis ฉันติดตั้ง 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.)
ฉันได้พยายามกำหนดเส้นทางแบบเต็มของ shapefile แต่ฉันได้รับข้อความเดียวกัน
นอกจากนี้ฉันพยายามเรียกใช้:
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 ทำให้สิ่งนี้ใช้งานได้ในที่สุด โหลดข้อมูลใน db อย่างถูกต้อง!
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=geonode dbname=geonode_imports password=geonode" -nlt GEOMETRY wld_bnd_adm0_gaul_2015.shp
-nln layername
อาร์กิวเมนต์ บางทีพร้อมกับ-overwrite
ดูว่ามันมาถึงชีวิต นอกจากนี้ถ้าฉันเป็นคุณฉันจะเรียกใช้ ogr2ogr sudo
พร้อมกับ superuser postgres ของฉันเพียงเพื่อให้แน่ใจในการออกกฎการอนุญาตและสิทธิพิเศษ เมื่อสคริปต์ของคุณเป็นแบบทึบคุณสามารถจิกไปที่การอนุญาตและสิทธิ์ที่น่ารำคาญ :)