Mengelola data spasial dengan GIS ekstensi Post - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengelola data spasial dengan GIS ekstensi Post

Post GIS adalah perpanjangan dari Postgre SQL untuk menyimpan dan mengelola informasi spasial. Untuk mempelajari lebih lanjut tentang PostGIS, lihat GISPost.net.

Dimulai dengan versi 10.5, Postgre SQL mendukung pustaka libprotobuf 1.3.0 yang digunakan oleh Post GIS untuk bekerja dengan data ubin vektor kotak peta.

Menyiapkan GIS ekstensi Post membutuhkan rds_superuser hak istimewa. Kami menyarankan Anda membuat pengguna (peran) untuk mengelola GIS ekstensi Post dan data spasial Anda. GISEkstensi Post dan komponen terkaitnya menambahkan ribuan fungsi ke PostgreSQL. Pertimbangkan untuk membuat GIS ekstensi Post dalam skemanya sendiri jika itu masuk akal untuk kasus penggunaan Anda. Contoh berikut menunjukkan cara menginstal ekstensi dalam basis data tersendiri, tetapi ini tidak wajib dilakukan.

Langkah 1: Buat pengguna (peran) untuk mengelola GIS ekstensi Post

Pertama, sambungkan ke instans Postgre SQL DB Anda RDS sebagai pengguna yang memiliki rds_superuser hak istimewa. Jika tidak mengubah nama default saat menyiapkan instans, Anda akan terhubung sebagai postgres.

psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

Buat peran terpisah (pengguna) untuk mengelola GIS ekstensi Post.

postgres=> CREATE ROLE gis_admin LOGIN PASSWORD 'change_me'; CREATE ROLE

Berikan hak akses rds_superuser kepada peran ini agar dapat menginstal ekstensi.

postgres=> GRANT rds_superuser TO gis_admin; GRANT

Buat database untuk digunakan untuk GIS artefak Post Anda. Langkah ini bersifat opsional. Atau Anda dapat membuat skema dalam database pengguna Anda untuk GIS ekstensi Post, tetapi ini juga tidak diperlukan.

postgres=> CREATE DATABASE lab_gis; CREATE DATABASE

Berikan semua hak akses gis_admin pada basis data lab_gis.

postgres=> GRANT ALL PRIVILEGES ON DATABASE lab_gis TO gis_admin; GRANT

Keluar dari sesi dan sambungkan kembali ke instans Postgre SQL DB Anda RDS sebagai. gis_admin

postgres=> psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=gis_admin --password --dbname=lab_gis Password for user gis_admin:... lab_gis=>

Lanjutkan menyiapkan ekstensi seperti yang dijelaskan pada langkah berikutnya.

Langkah 2: Muat GIS ekstensi Post

GISEkstensi Post mencakup beberapa ekstensi terkait yang bekerja sama untuk menyediakan fungsionalitas geospasial. Tergantung pada kasus penggunaannya, Anda mungkin tidak memerlukan semua ekstensi yang dibuat pada langkah ini.

Gunakan CREATE EXTENSION pernyataan untuk memuat GIS ekstensi Post.

CREATE EXTENSION postgis; CREATE EXTENSION CREATE EXTENSION postgis_raster; CREATE EXTENSION CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION CREATE EXTENSION postgis_tiger_geocoder; CREATE EXTENSION CREATE EXTENSION postgis_topology; CREATE EXTENSION CREATE EXTENSION address_standardizer_data_us; CREATE EXTENSION

Anda dapat memverifikasi hasil dengan menjalankan SQL kueri yang ditampilkan dalam contoh berikut, yang mencantumkan ekstensi dan pemiliknya.

SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1; List of schemas Name | Owner --------------+----------- public | postgres tiger | rdsadmin tiger_data | rdsadmin topology | rdsadmin (4 rows)

Langkah 3: Mentransfer kepemilikan ekstensi

Gunakan ALTER SCHEMA pernyataan untuk mentransfer kepemilikan skema ke gis_admin peran.

ALTER SCHEMA tiger OWNER TO gis_admin; ALTER SCHEMA ALTER SCHEMA tiger_data OWNER TO gis_admin; ALTER SCHEMA ALTER SCHEMA topology OWNER TO gis_admin; ALTER SCHEMA

Anda dapat mengonfirmasi perubahan kepemilikan dengan menjalankan SQL kueri berikut. Bisa juga dengan menggunakan metacommand \dn dari baris perintah psql.

SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1; List of schemas Name | Owner --------------+--------------- public | postgres tiger | gis_admin tiger_data | gis_admin topology | gis_admin (4 rows)

Langkah 4: Transfer kepemilikan GIS objek Post

Gunakan fungsi berikut untuk mentransfer kepemilikan GIS objek Post ke gis_admin peran. Jalankan pernyataan berikut dari perintah psql untuk membuat fungsinya.

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$; CREATE FUNCTION

Selanjutnya, jalankan kueri berikut untuk menjalankan fungsi exec yang nantinya akan menjalankan pernyataan dan mengubah izin.

SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO gis_admin;') FROM ( SELECT nspname, relname FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) WHERE nspname in ('tiger','topology') AND relkind IN ('r','S','v') ORDER BY relkind = 'S') s;

Langkah 5: Menguji ekstensi

Agar Anda tidak harus menentukan nama skema, tambahkan skema tiger ke jalur pencarian menggunakan perintah berikut.

SET search_path=public,tiger; SET

Uji tiger skema dengan menggunakan SELECT pernyataan berikut.

SELECT address, streetname, streettypeabbrev, zip FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na; address | streetname | streettypeabbrev | zip ---------+------------+------------------+------- 1 | Devonshire | Pl | 02109 (1 row)

Untuk mempelajari lebih lanjut tentang ekstensi ini, lihat Tiger Geocoder di dokumentasi PostGIS.

Uji akses ke skema topology menggunakan pernyataan SELECT berikut. Tindakan ini akan memanggil fungsi createtopology untuk mendaftarkan objek topologi baru (my_new_topo) dengan pengidentifikasi referensi spasial (26986) dan toleransi default (0,5) yang ditentukan. Untuk mempelajari lebih lanjut, lihat CreateTopologydi GIS dokumentasi Post.

SELECT topology.createtopology('my_new_topo',26986,0.5); createtopology ---------------- 1 (1 row)

Langkah 6: Tingkatkan GIS ekstensi Post

Setiap rilis baru Postgre SQL mendukung satu atau lebih versi GIS ekstensi Post yang kompatibel dengan rilis itu. Memutakhirkan SQL mesin Postgre ke versi baru tidak secara otomatis meningkatkan ekstensi Post. GIS Sebelum memutakhirkan SQL mesin Postgre, Anda biasanya meng-upgrade Post GIS ke versi terbaru yang tersedia untuk versi Postgre saat ini. SQL Untuk detailnya, lihat Versi GIS ekstensi posting.

Setelah upgrade SQL mesin Postgre, Anda kemudian meng-upgrade GIS ekstensi Post lagi, ke versi yang didukung untuk versi mesin SQL Postgre yang baru ditingkatkan. Cara melakukan peningkatan versi mayor.

Anda dapat memeriksa pembaruan versi GIS ekstensi Post yang tersedia di kapan SQL saja. Untuk melakukannya, jalankan perintah berikut. Fungsi ini tersedia dengan Post GIS 2.5.0 dan versi yang lebih tinggi.

SELECT postGIS_extensions_upgrade();

Jika aplikasi Anda tidak mendukung GIS versi Post terbaru, Anda dapat menginstal versi Post yang lebih lama GIS yang tersedia di versi utama Anda sebagai berikut.

CREATE EXTENSION postgis VERSION "2.5.5";

Jika Anda ingin meningkatkan ke GIS versi Post tertentu dari versi yang lebih lama, Anda juga dapat menggunakan perintah berikut.

ALTER EXTENSION postgis UPDATE TO "2.5.5";

Tergantung pada versi sebelum peningkatan, Anda mungkin perlu menggunakan fungsi ini lagi. Hasil dari menjalankan fungsi pertama akan menentukan perlu atau tidaknya fungsi peningkatan lain. Misalnya, ini adalah kasus untuk meningkatkan dari Post GIS 2 ke Post GIS 3. Untuk informasi selengkapnya, lihat Upgrade Post GIS 2 ke Post GIS 3.

Jika Anda memutakhirkan ekstensi ini untuk mempersiapkan peningkatan versi utama SQL mesin Postgre, Anda dapat melanjutkan tugas awal lainnya. Untuk informasi selengkapnya, lihat Cara melakukan peningkatan versi mayor.

Versi GIS ekstensi posting

Kami menyarankan Anda menginstal versi semua ekstensi seperti Post GIS seperti yang tercantum dalam versi . SQL Versi ekstensi untuk Amazon RDS untuk Postgre SQL di Amazon RDS untuk Catatan Rilis SQL Postgre. Untuk mendapatkan daftar versi yang tersedia dalam rilis Anda, gunakan perintah berikut.

SELECT * FROM pg_available_extension_versions WHERE name='postgis';

Anda dapat menemukan informasi versi di bagian berikut di Amazon RDS untuk Catatan SQL Rilis Postgre:

Upgrade Post GIS 2 ke Post GIS 3

Dimulai dengan versi 3.0, fungsionalitas Post GIS raster sekarang merupakan ekstensi terpisah,postgis_raster. Ekstensi ini memiliki jalur instalasi dan peningkatan tersendiri. Ekstensi ini menghapus berbagai fungsi, tipe data, dan artefak lain yang diperlukan untuk pemrosesan gambar raster dari ekstensi postgis inti. Artinya, jika kasus penggunaan Anda tidak memerlukan pemrosesan raster, Anda tidak perlu menginstal ekstensi postgis_raster.

Dalam contoh peningkatan berikut, perintah peningkatan pertama mengekstrak fungsionalitas raster ke dalam ekstensi postgis_raster. Selanjutnya, perintah peningkatan kedua diperlukan untuk meningkatkan postgis_raster ke versi baru.

Untuk meng-upgrade dari Post GIS 2 ke Post GIS 3
  1. Identifikasi versi default Post GIS yang tersedia untuk SQL versi Postgre di cluster Postgre DB Anda. SQL RDSuntuk contoh Postgre SQL DB. Untuk melakukannya, jalankan kueri berikut.

    SELECT * FROM pg_available_extensions WHERE default_version > installed_version;   name   | default_version | installed_version |                          comment ---------+-----------------+-------------------+------------------------------------------------------------  postgis | 3.1.4           | 2.3.7             | PostGIS geometry and geography spatial types and functions (1 row)
  2. Identifikasi versi Post yang GIS diinstal di setiap database pada . Anda RDS untuk instance Postgre SQL DB. Dengan kata lain, buat kueri setiap basis data pengguna sebagai berikut.

    SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" FROM pg_catalog.pg_extension e LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass WHERE e.extname LIKE '%postgis%' ORDER BY 1;   Name   | Version | Schema |                             Description ---------+---------+--------+---------------------------------------------------------------------  postgis | 2.3.7   | public | PostGIS geometry, geography, and raster spatial types and functions (1 row)

    Ketidakcocokan antara versi default (Post GIS 3.1.4) dan versi yang diinstal (Post GIS 2.3.7) berarti Anda perlu memutakhirkan ekstensi Post. GIS

    ALTER EXTENSION postgis UPDATE; ALTER EXTENSION WARNING: unpackaging raster WARNING: PostGIS Raster functionality has been unpackaged
  3. Jalankan kueri berikut untuk memverifikasi bahwa fungsi raster kini telah berada dalam paketnya tersendiri.

    SELECT probin, count(*) FROM pg_proc WHERE probin LIKE '%postgis%' GROUP BY probin;           probin          | count --------------------------+-------  $libdir/rtpostgis-2.3    | 107  $libdir/postgis-3        | 487 (2 rows)

    Output-nya menunjukkan bahwa masih ada perbedaan antarversi. GISFungsi Post adalah versi 3 (postgis-3), sedangkan fungsi raster (rtpostgis) adalah versi 2 (rtpostgis-2.3). Untuk menyelesaikan peningkatan, Anda dapat menjalankan perintah peningkatan lagi sebagai berikut.

    postgres=> SELECT postgis_extensions_upgrade();

    Anda dapat dengan aman mengabaikan pesan peringatan. Jalankan lagi kueri berikut untuk memverifikasi bahwa peningkatan telah selesai. Upgrade selesai ketika Post GIS dan semua ekstensi terkait tidak ditandai sebagai perlu upgrade.

    SELECT postgis_full_version();
  4. Gunakan kueri berikut untuk melihat proses peningkatan yang telah selesai dan ekstensi yang dikemas secara terpisah, lalu verifikasi bahwa versinya telah sesuai.

    SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" FROM pg_catalog.pg_extension e LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass WHERE e.extname LIKE '%postgis%' ORDER BY 1;       Name      | Version | Schema |                             Description ----------------+---------+--------+---------------------------------------------------------------------  postgis        | 3.1.5   | public | PostGIS geometry, geography, and raster spatial types and functions  postgis_raster | 3.1.5   | public | PostGIS raster types and functions (2 rows)

    Output menunjukkan bahwa ekstensi Post GIS 2 ditingkatkan ke Post GIS 3, dan keduanya postgis dan postgis_raster ekstensi yang sekarang terpisah adalah versi 3.1.5.

Setelah peningkatan ini selesai, Anda dapat menghapus ekstensi seperti berikut jika tidak berencana menggunakan fungsionalitas raster.

DROP EXTENSION postgis_raster;