Cài đặt Postgis: loại “hình học” không tồn tại


95

Tôi đang cố gắng tạo bảng bằng Postgis. Tôi làm điều đó bởi trang này . Nhưng khi tôi nhập tệp postgis.sql, tôi gặp rất nhiều lỗi:

ERROR:  type "geometry" does not exist

Có ai biết làm thế nào tôi có thể sửa chữa nó?

Câu trả lời:


199

Tôi gặp sự cố tương tự, nhưng nó đã được khắc phục bằng cách chạy mã sau

CREATE EXTENSION postgis;

Chi tiết,

  1. mở pgAdmin
  2. chọn (nhấp vào) cơ sở dữ liệu của bạn
  3. nhấp vào biểu tượng "SQL" trên thanh
  4. chạy "TẠO MỞ RỘNG postgis;" mã

3
Cảm ơn. BTW, Nếu ai đó sử dụng 'psql' để chạy mã này, hãy đảm bảo vai trò có thuộc tính / đặc quyền 'Superuser'.
Yang

2
TIẾT KIỆM CUỘC SỐNG! Tôi nghĩ tôi đã muốn thiết lập này vì vậy tôi cứ nghĩ nó là cái gì khác ...
James111

2
Lưu ý rằng điều này dành riêng cho một cơ sở dữ liệu cụ thể mà bạn đang sử dụng. Nó không phải là toàn bộ cài đặt.
fooquency

1
Tôi đặt lại pg_dump và gặp vấn đề tương tự. Tiện ích mở rộng postgis của tôi đặt dữ liệu của nó vào một SCHEME tùy chỉnh, được gọi là postgis. Tôi cần thiết để chạy các lệnh sau, và tất cả mọi thứ là tốt một lần nữa:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman

23

Nếu Postgis-Extension được tải, thì SQL của bạn có thể không tìm thấy kiểu hình học vì thiếu đường dẫn tìm kiếm đến lược đồ công khai.

Thử

SET search_path = ..., public;

trong dòng đầu tiên của scsript của bạn. (thay thế ... bằng các đường dẫn tìm kiếm bắt buộc khác)


22

Bạn có thể làm điều đó từ thiết bị đầu cuối:

psql mydatabasename -c "CREATE EXTENSION postgis";

18

Để khiến psql dừng ở lỗi đầu tiên, hãy sử dụng -v ON_ERROR_STOP=1(tùy chọn này được tắt theo mặc định , đó là lý do tại sao bạn thấy nhiều lỗi). Ví dụ:

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

Lỗi thực tế là một cái gì đó như "không thể tải thư viện X", có thể thay đổi tùy theo trường hợp của bạn. Theo dự đoán, hãy thử lệnh này trước khi cài đặt tập lệnh sql:

ldconfig

(bạn có thể cần thêm tiền tố sudotùy thuộc vào hệ thống của bạn). Lệnh này cập nhật các đường dẫn đến tất cả các thư viện hệ thống, chẳng hạn như GEOS.


5

Bạn phải bật tiện ích mở rộng trên cơ sở dữ liệu của mình.

psql my_database -c "CREATE EXTENSION postgis;"


5

Lỗi này cũng có thể xảy ra nếu bạn cố gắng sử dụng các loại postgis trên một lược đồ khác chứ không phải public.

Nếu bạn đang tạo lược đồ của riêng mình, bằng cách sử dụng postgis 2.3 trở lên và gặp phải lỗi này, hãy thực hiện như đã nêu ở đây :

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;

Sau đó, bạn có thể tiếp tục sử dụng các chức năng postgis.


3

Bạn cũng cần đảm bảo rằng người dùng mà bạn đang cố gắng sử dụng tiện ích mở rộng postgis, có quyền truy cập vào lược đồ nơi postgis được thiết lập (mà trong các hướng dẫn tôi đọc được gọi là 'postgis').

Tôi vừa gặp lỗi này và nó đã được giải quyết vì tôi chỉ cấp cho người dùng mới quyền truy cập vào cơ sở dữ liệu. Trong cơ sở dữ liệu tôi đã tạo, tôi đã chạy:

grant all on schema postgis to USERNAME; 

Và điều này đã giải quyết được lỗi này


1

Các câu trả lời ở đây có thể giải quyết vấn đề của bạn, tuy nhiên nếu bạn đã bật postgis trên DB của mình, thì vấn đề có thể là bạn đang cố khôi phục bảng postgis (với cột hình học) thành một lược đồ khác với nơi mà tiện ích mở rộng postgis của bạn được bật. Trong pgAdmin, bạn có thể nhấp vào tiện ích mở rộng postgis và xem lược đồ nào được chỉ định. Nếu bạn đang cố gắng khôi phục bảng có cột hình học thành một giản đồ khác, bạn có thể gặp lỗi này.

Tôi đã giải quyết vấn đề này bằng cách thay đổi tiện ích mở rộng postgis của mình - tuy nhiên tôi không chắc đó có nhất thiết phải là cách tốt nhất để làm điều đó hay không. Tất cả những gì tôi biết là nó cho phép tôi khôi phục bảng.


cho đến khi PostGIS phiên bản 2.3 bạn có thể di chuyển các phần mở rộng khác schema mà giải quyết vấn đề này cho tôi một vài lần
Daniel Tulp

0

Hoặc là...

cursor.execute('create extension postgis')

trong chương trình python của bạn, sử dụng con trỏ hiện tại từ psycopg2.


0

Đầu tiên hãy đảm bảo rằng bạn đã cài đặt postgis (khớp với phiên bản pg: psql -V):

sudo apt install postgis postgresql-9.6-postgis-2.3

Ngay trước khi tạo bảng, hãy thêm:

db.engine.execute('create extension postgis') 
db.create_all()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.