Làm cách nào để tạo mẫu PostGIS?


19

Tôi đang làm theo một hướng dẫn để cài đặt pgrouting. Tuy nhiên, tôi đã không nhận được một phần khi nó nói

Bắt đầu pgAdmin và tạo cơ sở dữ liệu mới dựa trên mẫu PostGIS của bạn

Tôi có thể lấy mẫu postgis này ở đâu? Tôi biết tôi đã cài đặt PostGIS bằng homebrew. Nhưng tôi không thể tìm thấy mẫu. Tôi đang chạy macos bây giờ.


1
Phiên bản nào của PostGIS bạn đang sử dụng?
RK

Câu trả lời:


16

Phương pháp mới với PostgreSQL 9.1

Nhờ lời khuyên của RK bên dưới, tôi đã xem hướng dẫn này và thấy rằng đối với PostgreQuery 9.1, tất cả những gì bạn cần làm là thêm các tiện ích mở rộng postgispostgis_topologyvào cơ sở dữ liệu hiện có bằng menu ngữ cảnh pgAdmin. Để tạo một mẫu postgis, tôi đã tạo một cơ sở dữ liệu mới được gọi template-postgisvà sau đó thêm các phần mở rộng này. Sau đó tôi đã tạo cơ sở dữ liệu khác của mình bằng cách sử dụng mẫu này. Khi sử dụng pg_dumptôi thấy kích thước của xuất nhỏ hơn nhiều, vì dường như chỉ bao gồm các dòng này và không kết xuất các hàm mở rộng:

CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS postgis_topology WITH SCHEMA topology;

Phương pháp dự phòng cũ:

Tôi đã kết thúc bằng cách sử dụng các tập tin .sql ở đây:

/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/topology.sql

Ngoài ra, tôi đã gặp lỗi này khi tôi nhập cơ sở dữ liệu PostGIS hiện có vào cơ sở dữ liệu mới được tạo từ mẫu này:

ERROR:  type "spheroid" already exists

Vì vậy, tôi đã làm theo các hướng dẫn ở đây và sử dụng ON_ERROR_ROLLBACK=onđể thiết lập mẫu, sau khi tạo một cơ sở dữ liệu trống có tên là "template_postgis":

psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql -v ON_ERROR_ROLLBACK=on
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql -v ON_ERROR_ROLLBACK=on
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/topology.sql -v ON_ERROR_ROLLBACK=on

Và sau đó nhập db sao lưu của tôi, ví dụ:

psql -U someuser -d somedb -1 -f somefile.sql -v ON_ERROR_ROLLBACK=on

Ngay cả phương pháp cũ hơn:

Tôi đã làm điều này:

createdb -E UTF8 -T template0 template_postgis
createlang -d template_postgis plpgsql
psql --quiet -d template_postgis -f /Applications/Postgres.app/Contents/MacOS/share/extension/postgis--2.0.1.sql

Đường dẫn đến postgis--2.0.1.sqlsẽ khác nhau tùy thuộc vào thiết lập của bạn.


Để hoàn thành câu trả lời của bạn (hoạt động trên máy Mac của tôi): trên máy Mac, nếu bạn đã cài đặt postgis từ cổng Kyngchaos, tệp cài đặt postgis là: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris

Đối với phương pháp mới nhất, có cần 'SCHema' không? Cái này để làm gì? (Của bạn là ví dụ duy nhất tôi từng thấy cho đến nay làm điều đó.)
matt wilkie

14

Nếu bạn đang chạy PostgreSQL 9.1+, bạn không cần bận tâm đến cơ sở dữ liệu mẫu . Chỉ cần tạo một cơ sở dữ liệu và sau đó trên chế độ xem SQL trong pgAdmin, nhập và chạy

CREATE EXTENSION postgis;

Điều đó sẽ cho phép cơ sở dữ liệu của bạn.


Phương pháp mẫu vẫn có thể được sử dụng? Hoặc, có cách nào để thêm thông tin này vào hộp thoại "cơ sở dữ liệu mới" trong pgAdminIII không?
monkut

có lẽ bạn cũng muốn thêmCREATE EXTENSION postgis_topology;
matt wilkie

1
@monkut trong pgAdmin4, tính năng này có sẵn thông qua nhấp chuột phải vào 'Tiện ích mở rộng' trong cây điều hướng
matt wilkie

CREATE EXTENSIONcần các đặc quyền siêu người dùng, vì vậy thực sự tạo / sử dụng một mẫu có thể là ý tưởng rất tốt.
Cromax

3

trong thực tế đây là nền tảng của cài đặt postgis.

nếu bạn có mẫu postgis, bạn có thể tạo cơ sở dữ liệu mới từ nó dưới dạng:

 createdb -T postgistemplate -O gis gisdb

nếu bạn không có nó, bạn có thể làm điều này theo cách này:

sudo su postgres
createdb postgistemplate
createlang plpgsql postgistemplate
psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/lwpostgis.sql
psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/spatial_ref_sys.sql

bạn có thể sử dụng tập lệnh bash Debian / Ubuntu - created_template_postgis-debian.sh, tại đây

Tôi hy vọng nó sẽ giúp bạn...


Đây có thể là trường hợp người dùng postgreskhông có quyền sử dụng thiết bị đầu cuối, trong trường hợp đó sudo su postgreslệnh sẽ âm thầm thất bại. Để vượt qua điều này, bạn có thể đặt trước tất cả các lệnh này sudo -u postgresđể chạy lệnh với tư cách là người dùng postgres mà không cần chuyển sang người dùng postgres.
Đổ chuông


2
#!/bin/sh
instance_name=$1
psql << EOF
create database $instance_name;
\connect $instance_name
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
EOF

Tôi sử dụng tập lệnh bash này để thực hiện việc tạo cơ sở dữ liệu mới với chức năng postgis và tên được đặt trên stdin.

Hậu 9,3

Bài viết 2.1.3

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.