การติดตั้ง Postgis: ไม่มีประเภท "geometry"


97

ฉันกำลังพยายามสร้างตารางด้วย Postgis ฉันทำตามหน้านี้ แต่เมื่อฉันนำเข้าไฟล์ postgis.sql ฉันได้รับข้อผิดพลาดมากมาย:

ERROR:  type "geometry" does not exist

มีใครรู้บ้างว่าฉันจะแก้ไขได้อย่างไร

คำตอบ:


210

ฉันมีปัญหาเดียวกัน แต่ได้รับการแก้ไขโดยการเรียกใช้รหัสต่อไปนี้

CREATE EXTENSION postgis;

ในรายละเอียด,

  1. เปิด pgAdmin
  2. เลือก (คลิก) ฐานข้อมูลของคุณ
  3. คลิกไอคอน "SQL" บนแถบ
  4. เรียกใช้ "CREATE EXTENSION postgis;" รหัส

3
ขอบคุณ. BTW หากมีคนใช้ 'psql' เพื่อเรียกใช้รหัสนี้ตรวจสอบให้แน่ใจว่าบทบาทนั้นมีแอตทริบิวต์ / สิทธิ์ "Superuser"
ยาง

2
ช่วยชีวิต! ฉันคิดว่าฉันตั้งค่านี้ไว้แล้วดังนั้นฉันจึงคิดว่ามันเป็นอย่างอื่น ...
James111

2
โปรดทราบว่านี่เป็นข้อมูลเฉพาะสำหรับฐานข้อมูลเฉพาะที่คุณใช้อยู่ มันไม่กว้างในการติดตั้ง
fooquency

1
ฉันใส่ pg_dump กลับและมีปัญหาเดียวกัน ส่วนขยาย postgis ของฉันทำให้ข้อมูลเป็น SCHEME ที่กำหนดเองเรียกว่าpostgis. ฉันต้องการเรียกใช้คำสั่งต่อไปนี้และทุกอย่างก็กลับมาดีอีกครั้ง:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman

23

หากโหลด Postgis-Extension แล้ว SQL ของคุณอาจไม่พบ geometry-type เนื่องจากไม่มีเส้นทางการค้นหาไปยังสคีมาสาธารณะ

ลอง

SET search_path = ... , สาธารณะ;

ในบรรทัดแรกของสคริปต์ของคุณ (แทนที่ ... ด้วยเส้นทางการค้นหาอื่น ๆ ที่จำเป็น)



18

เพื่อให้ psql หยุดข้อผิดพลาดแรกให้ใช้-v ON_ERROR_STOP=1(ซึ่งปิดอยู่โดยค่าเริ่มต้นซึ่งเป็นสาเหตุที่คุณเห็นข้อผิดพลาดมากมาย) ตัวอย่างเช่น:

psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql

ข้อผิดพลาดที่แท้จริงคือ "ไม่สามารถโหลดไลบรารี X" ซึ่งอาจแตกต่างกันไปตามสถานการณ์ของคุณ ลองใช้คำสั่งนี้ก่อนติดตั้งสคริปต์ sql:

ldconfig

(คุณอาจต้องsudoขึ้นต้นด้วยขึ้นอยู่กับระบบของคุณ) คำสั่งนี้อัพเดตเส้นทางไปยังไลบรารีระบบทั้งหมดเช่น GEOS


6

ข้อผิดพลาดนี้อาจเกิดขึ้นหากคุณพยายามที่จะใช้ชนิด 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 ต่อได้



3

คุณต้องตรวจสอบให้แน่ใจว่าผู้ใช้ที่คุณพยายามใช้ส่วนขยาย postgis ในฐานะนั้นสามารถเข้าถึงสคีมาที่ตั้งค่า postgis ได้ (ซึ่งในบทช่วยสอนที่ฉันอ่านเรียกว่า 'postgis')

ฉันเพิ่งมีข้อผิดพลาดนี้และได้รับการแก้ไขเนื่องจากฉันให้สิทธิ์ผู้ใช้ใหม่เข้าถึงฐานข้อมูลเท่านั้น ในฐานข้อมูลที่ฉันสร้างขึ้นฉันรัน:

grant all on schema postgis to USERNAME; 

และแก้ไขข้อผิดพลาดนี้


1

คำตอบที่นี่อาจช่วยแก้ปัญหาของคุณได้อย่างไรก็ตามหากคุณเปิดใช้งาน postgis บนฐานข้อมูลของคุณอยู่แล้วปัญหาอาจเกิดจากคุณกำลังพยายามกู้คืนตาราง postgis (ที่มีคอลัมน์รูปทรงเรขาคณิต) ลงในสคีมานอกเหนือจากที่คุณเปิดใช้งานส่วนขยาย postgis ใน pgAdmin คุณสามารถคลิกที่ส่วนขยาย postgis และดูว่าสคีมาใดถูกระบุ หากคุณพยายามกู้คืนตารางที่มีคอลัมน์เรขาคณิตเป็นสคีมาอื่นคุณอาจได้รับข้อผิดพลาดนี้

ฉันแก้ไขปัญหานี้โดยการแก้ไขส่วนขยาย postgis ของฉัน - แต่ฉันไม่แน่ใจว่านั่นเป็นวิธีที่ดีที่สุดหรือไม่ ทั้งหมดที่ฉันรู้ก็คือมันทำให้ฉันสามารถกู้คืนตารางได้


จนถึง Postgis เวอร์ชัน 2.3 คุณสามารถย้ายส่วนขยายไปยังสคีมาอื่นซึ่งแก้ปัญหานี้ให้ฉันได้สองสามครั้ง
Daniël Tulp

0

หรือ...

cursor.execute('create extension postgis')

ในโปรแกรม python ของคุณโดยใช้เคอร์เซอร์ปัจจุบันจาก psycopg2


0

ขั้นแรกตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง (จับคู่กับเวอร์ชัน pg: psql -V)

sudo apt install postgis postgresql-9.6-postgis-2.3

ก่อนสร้างตารางเพิ่ม:

db.engine.execute('create extension postgis') 
db.create_all()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.