ฉันกำลังพยายามสร้างตารางด้วย Postgis ฉันทำตามหน้านี้ แต่เมื่อฉันนำเข้าไฟล์ postgis.sql ฉันได้รับข้อผิดพลาดมากมาย:
ERROR: type "geometry" does not exist
มีใครรู้บ้างว่าฉันจะแก้ไขได้อย่างไร
ฉันกำลังพยายามสร้างตารางด้วย Postgis ฉันทำตามหน้านี้ แต่เมื่อฉันนำเข้าไฟล์ postgis.sql ฉันได้รับข้อผิดพลาดมากมาย:
ERROR: type "geometry" does not exist
มีใครรู้บ้างว่าฉันจะแก้ไขได้อย่างไร
คำตอบ:
ฉันมีปัญหาเดียวกัน แต่ได้รับการแก้ไขโดยการเรียกใช้รหัสต่อไปนี้
CREATE EXTENSION postgis;
ในรายละเอียด,
postgis
. ฉันต้องการเรียกใช้คำสั่งต่อไปนี้และทุกอย่างก็กลับมาดีอีกครั้ง:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
หากโหลด Postgis-Extension แล้ว SQL ของคุณอาจไม่พบ geometry-type เนื่องจากไม่มีเส้นทางการค้นหาไปยังสคีมาสาธารณะ
ลอง
SET search_path = ... , สาธารณะ;
ในบรรทัดแรกของสคริปต์ของคุณ (แทนที่ ... ด้วยเส้นทางการค้นหาอื่น ๆ ที่จำเป็น)
คุณสามารถทำได้จากเทอร์มินัล:
psql mydatabasename -c "CREATE EXTENSION postgis";
เพื่อให้ psql หยุดข้อผิดพลาดแรกให้ใช้-v ON_ERROR_STOP=1
(ซึ่งปิดอยู่โดยค่าเริ่มต้นซึ่งเป็นสาเหตุที่คุณเห็นข้อผิดพลาดมากมาย) ตัวอย่างเช่น:
psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql
ข้อผิดพลาดที่แท้จริงคือ "ไม่สามารถโหลดไลบรารี X" ซึ่งอาจแตกต่างกันไปตามสถานการณ์ของคุณ ลองใช้คำสั่งนี้ก่อนติดตั้งสคริปต์ sql:
ldconfig
(คุณอาจต้องsudo
ขึ้นต้นด้วยขึ้นอยู่กับระบบของคุณ) คำสั่งนี้อัพเดตเส้นทางไปยังไลบรารีระบบทั้งหมดเช่น GEOS
ข้อผิดพลาดนี้อาจเกิดขึ้นหากคุณพยายามที่จะใช้ชนิด PostGIS ในสคีอื่นpublic
มากกว่า
ถ้าคุณกำลังสร้างคุณคีมาเองโดยใช้ PostGIS 2.3 หรือสูงกว่าและพบข้อผิดพลาดนี้ดำเนินการต่อไปตามที่ระบุไว้ที่นี่ :
CREATE SCHEMA IF NOT EXISTS my_schema;
CREATE extension postgis;
UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';
ALTER EXTENSION postgis
SET SCHEMA my_schema;
ALTER EXTENSION postgis
UPDATE TO "2.5.2next";
ALTER EXTENSION postgis
UPDATE TO "2.5.2";
SET search_path TO my_schema;
จากนั้นคุณสามารถใช้ฟังก์ชัน postgis ต่อได้
คุณต้องเปิดใช้งานส่วนขยายบนฐานข้อมูลของคุณ
psql my_database -c "CREATE EXTENSION postgis;"
คุณต้องตรวจสอบให้แน่ใจว่าผู้ใช้ที่คุณพยายามใช้ส่วนขยาย postgis ในฐานะนั้นสามารถเข้าถึงสคีมาที่ตั้งค่า postgis ได้ (ซึ่งในบทช่วยสอนที่ฉันอ่านเรียกว่า 'postgis')
ฉันเพิ่งมีข้อผิดพลาดนี้และได้รับการแก้ไขเนื่องจากฉันให้สิทธิ์ผู้ใช้ใหม่เข้าถึงฐานข้อมูลเท่านั้น ในฐานข้อมูลที่ฉันสร้างขึ้นฉันรัน:
grant all on schema postgis to USERNAME;
และแก้ไขข้อผิดพลาดนี้
คำตอบที่นี่อาจช่วยแก้ปัญหาของคุณได้อย่างไรก็ตามหากคุณเปิดใช้งาน postgis บนฐานข้อมูลของคุณอยู่แล้วปัญหาอาจเกิดจากคุณกำลังพยายามกู้คืนตาราง postgis (ที่มีคอลัมน์รูปทรงเรขาคณิต) ลงในสคีมานอกเหนือจากที่คุณเปิดใช้งานส่วนขยาย postgis ใน pgAdmin คุณสามารถคลิกที่ส่วนขยาย postgis และดูว่าสคีมาใดถูกระบุ หากคุณพยายามกู้คืนตารางที่มีคอลัมน์เรขาคณิตเป็นสคีมาอื่นคุณอาจได้รับข้อผิดพลาดนี้
ฉันแก้ไขปัญหานี้โดยการแก้ไขส่วนขยาย postgis ของฉัน - แต่ฉันไม่แน่ใจว่านั่นเป็นวิธีที่ดีที่สุดหรือไม่ ทั้งหมดที่ฉันรู้ก็คือมันทำให้ฉันสามารถกู้คืนตารางได้
หรือ...
cursor.execute('create extension postgis')
ในโปรแกรม python ของคุณโดยใช้เคอร์เซอร์ปัจจุบันจาก psycopg2
ขั้นแรกตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง (จับคู่กับเวอร์ชัน pg: psql -V)
sudo apt install postgis postgresql-9.6-postgis-2.3
ก่อนสร้างตารางเพิ่ม:
db.engine.execute('create extension postgis')
db.create_all()