Bagikan melalui


Pertimbangan dengan penggunaan ekstensi dan modul

Artikel ini menjelaskan beberapa pertimbangan khusus yang harus Anda ketahui, saat menggunakan ekstensi atau modul tertentu dalam instans server fleksibel Azure Database for PostgreSQL.

Pertimbangan umum dengan ekstensi

Untuk menggunakan ekstensi di Azure Database untuk instance server fleksibel PostgreSQL, Anda perlu:

  • Izinkan ekstensi. Jika ekstensi tidak diizinkan, upaya apa pun untuk mengeksekusi CREATE EXTENSION, , ALTER EXTENSIONDROP EXTENSION, atau COMMENT ON EXTENSION gagal dengan kesalahan yang menunjukkan bahwa ekstensi yang dirujuk tidak diizinkan.
  • Jika ekstensi menyebarkan beberapa pustaka biner bersama yang memerlukan alokasi dan akses memori bersama, dan perlu dimuat saat server dimulai, Anda juga harus mengikuti instruksi yang disediakan dalam pustaka beban.
  • Buat ekstensi di database tempat Anda ingin ekstensi menyebarkan objek SQL yang didistribusikan dengan ekstensi tersebut.
  • Lepaskan ekstensi. Saat Anda ingin menghapus dari database tempat Anda menjalankan perintah semua objek SQL yang didistribusikan oleh ekstensi tersebut.
  • Perbarui ekstensi, untuk memperbarui ke versi terbarunya semua artefak SQL yang disebarkan oleh ekstensi yang sudah diinstal.
  • Lihat ekstensi yang diinstal dan versi yang sesuai.

Jika Anda mendapatkan kesalahan saat menjalankan CREATE EXTENSIONperintah , , ALTER EXTENSIONDROP EXTENSION atau COMMENT ON EXTENSION pada instans server fleksibel Azure Database for PostgreSQL Anda, lihat daftar kemungkinan kesalahan, dan apa yang bisa menjadi penyebab setiap kesalahan tersebut.

Pertimbangan umum dengan modul

Untuk menggunakan modul di instans server fleksibel Azure Database for PostgreSQL, Anda hanya perlu menambahkannya ke shared_preload_libraries parameter server seperti yang dijelaskan dalam pustaka beban.

Modul tidak perlu diizinkan. Itu adalah persyaratan eksklusif untuk ekstensi.

Ekstensi dengan pertimbangan tertentu

Daftar berikut menghitung semua ekstensi yang didukung yang memerlukan pertimbangan khusus saat digunakan dalam instans server fleksibel Azure Database for PostgreSQL:

  • AGE
  • dblink
  • pg_buffercache
  • pg_cron
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • postgres_fdw
  • pgstattuple

AGE

Ekstensi Apache AGE adalah ekstensi grafik untuk PostgreSQL yang didukung oleh Azure Database for PostgreSQL. Ini menyediakan fungsionalitas database grafik, dukungan kueri cypher terbuka, dan kemampuan untuk menjalankan kueri kompleks pada data grafik yang disimpan di PostgreSQL. 'Apache AGE' adalah proyek sumber terbuka yang dirilis di bawah Apache License 2.0.

Instal AGE

Untuk menggunakan AGE, pastikan Anda 'mengizinkan' ekstensi, 'muat pustakanya', dan 'instal ekstensi' di database tempat Anda berencana menggunakan fungsionalitasnya.

Ekstensi ini dblink memungkinkan Anda menyambungkan dari satu instans server fleksibel Azure Database for PostgreSQL ke database lain atau database lain di server yang sama. Azure Database for PostgreSQL mendukung koneksi masuk dan keluar ke server PostgreSQL apa pun. Server pengirim perlu memperbolehkan sambungan keluar ke server penerima. Demikian pula, server penerima perlu mengizinkan koneksi dari server pengirim.

Jika Anda berencana menggunakan ekstensi ini, sebaiknya sebarkan server Anda dengan integrasi jaringan virtual. Secara default, integrasi jaringan virtual memungkinkan koneksi antar server di jaringan virtual. Anda juga dapat memilih untuk menggunakan kelompok keamanan jaringan virtual untuk menyesuaikan akses.

pg_buffercache

pg_buffercache Ekstensi ini dapat digunakan untuk mempelajari isi shared_buffers. Dengan menggunakan ekstensi ini, Anda dapat mengetahui apakah hubungan tertentu di-cache (dalam shared_buffers). Ekstensi ini dapat membantu Anda memecahkan masalah performa (masalah performa terkait penembolokan).

Ekstensi ini terintegrasi dengan penginstalan inti PostgreSQL, dan mudah diinstal.

CREATE EXTENSION pg_buffercache;

pg_cron

Ekstensi ini pg_cron adalah penjadwal pekerjaan sederhana berbasis cron untuk PostgreSQL yang berjalan di dalam database sebagai ekstensi. pg_cron Ekstensi dapat menjalankan tugas pemeliharaan terjadwal dalam database PostgreSQL. Misalnya, Anda dapat menjalankan vakum berkala tabel atau menghapus pekerjaan data lama.

pg_cron Ekstensi dapat menjalankan beberapa pekerjaan secara paralel, tetapi berjalan paling banyak satu instans pekerjaan pada satu waktu. Jika eksekusi kedua seharusnya dimulai sebelum yang pertama selesai, maka eksekusi kedua diantrikan dan dimulai segera setelah eksekusi pertama selesai. Dengan cara seperti itu, ia memastikan bahwa pekerjaan berjalan tepat sebanyak yang dijadwalkan dan tidak berjalan bersamaan dengan diri mereka sendiri.

Pastikan bahwa nilai yang shared_preload_libraries diatur, termasuk pg_cron. Ekstensi ini tidak mendukung pemuatan pustaka sebagai efek menjalankan CREATE EXTENSION. Setiap upaya untuk menjalankan CREATE EXTENSION jika ekstensi tidak ditambahkan ke shared_preload_libraries, atau server tidak dimulai ulang setelah ditambahkan, menghasilkan kesalahan yang teksnya mengatakan pg_cron can only be loaded via shared_preload_libraries, dan yang petunjuknya adalah Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.

Untuk menggunakan pg_cron, pastikan Anda memuat pustaka bersamanya saat server dimulai, diizinkan, dan diinstal dalam database apa pun tempat Anda ingin berinteraksi dengan fungsionalitasnya, menggunakan artefak SQL yang dibuatnya.

Examples

  1. Untuk menghapus data lama pada hari Sabtu pukul 03.30 (GMT).

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. Untuk menjalankan vakum setiap hari pada pukul 10.00 (GMT) di database postgresdefault .

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. Untuk membatalkan jadwal semua tugas dari pg_cron.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Untuk melihat semua pekerjaan yang saat ini dijadwalkan dengan pg_cron.

    SELECT * FROM cron.job;
    
  5. Untuk menjalankan vakum setiap hari pada pukul 10.00 (GMT) dalam database test cron di bawah azure_pg_admin akun peran.

    SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
    

Contoh lainnya

Dimulai dengan pg_cron versi 1.4, Anda dapat menggunakan cron.schedule_in_database fungsi dan cron.alter_job untuk menjadwalkan pekerjaan Anda dalam database tertentu dan memperbarui jadwal yang ada.

Fungsi ini cron_schedule_in_database memungkinkan nama pengguna sebagai parameter opsional. Mengatur nama pengguna ke nilai non-null memerlukan hak istimewa superuser PostgreSQL dan tidak didukung untuk instans server fleksibel Azure Database for PostgreSQL. Contoh sebelumnya menunjukkan menjalankan fungsi ini dengan parameter nama pengguna opsional yang dihilangkan atau diatur ke null, yang menjalankan pekerjaan dalam konteks pengguna yang menjadwalkan pekerjaan, yang harus memiliki azure_pg_admin hak istimewa peran.

  1. Untuk menghapus data lama pada hari Sabtu pukul 03.30 (GMT) di database DBName.

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. Untuk memperbarui atau mengubah nama database bagi jadwal yang sudah ada

    SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
    

pg_hint_plan

pg_hint_plan Ekstensi ini memungkinkan untuk mengubah rencana eksekusi PostgreSQL menggunakan apa yang disebut "petunjuk" dalam komentar SQL, seperti:

/*+ SeqScan(a) */

Ekstensi membaca pg_hint_plan frasa petunjuk dalam komentar formulir khusus yang diberikan dengan pernyataan SQL target. Formulir tertentu dimulai dengan urutan karakter "/*+" dan diakhir dengan "*/". Frasa petunjuk terdiri dari nama petunjuk dan parameter berikut yang diapit oleh tanda kurung dan dibatasi oleh spasi. Baris baru untuk keterbacaan dapat memisahkan setiap frasa petunjuk.

Example:

/*+
 HashJoin(a b)
 SeqScan(a)
 */
    SELECT *
    FROM pgbench_branches b
    JOIN pgbench_accounts an ON b.bid = a.bid
    ORDER BY a.aid;

Contoh sebelumnya menyebabkan perencana menggunakan hasil seqscan pada tabel a untuk digabungkan dengan tabel b sebagai hashjoin.

Untuk menggunakan pg_hint_plan ekstensi, pastikan Anda mengizinkan daftar ekstensi, memuat pustakanya, dan menginstal ekstensi dalam database tempat Anda berencana menggunakan fungsionalitasnya.

pg_prewarm

pg_prewarm Ekstensi memuat data relasional ke dalam cache. Prawarming cache Anda berarti kueri Anda memiliki waktu respons yang lebih baik pada eksekusi pertama mereka setelah menghidupkan ulang. Fungsionalitas autoprewarm untuk PostgreSQL saat ini tidak tersedia di Azure Database.

pg_repack

Pertama kali pengguna pg_repack ekstensi biasanya mengajukan pertanyaan berikut: Apakah pg_repack ekstensi atau sisi klien dapat dieksekusi seperti psql atau pg_dump?

pg_repack sebenarnya keduanya. pg_repack/lib memiliki kode untuk ekstensi, termasuk skema dan artefak SQL yang dibuatnya, dan pustaka C yang mengimplementasikan kode beberapa fungsi tersebut.

Di sisi lain, pg_repack/bin memiliki kode untuk aplikasi klien, yang tahu cara berinteraksi dengan elemen kemampuan pemrograman yang diterapkan dalam ekstensi. Aplikasi klien ini bertujuan untuk memudahkan kompleksitas berinteraksi dengan berbagai antarmuka yang muncul oleh ekstensi sisi server. Ini menawarkan pengguna beberapa opsi baris perintah yang lebih mudah dipahami. Aplikasi klien tidak berguna tanpa ekstensi yang dibuat pada database yang sedang ditunjukkannya. Ekstensi sisi server sendiri akan berfungsi penuh, tetapi akan mengharuskan pengguna untuk memahami pola interaksi yang rumit. Pola itu akan terdiri dari menjalankan kueri untuk mengambil data yang digunakan sebagai input ke fungsi yang diterapkan oleh ekstensi, dll.

Izin ditolak untuk paket ulang skema

Saat ini, karena kami memberikan izin ke skema paket ulang yang dibuat oleh ekstensi ini, kami hanya mendukung fungsionalitas yang berjalan pg_repack dari konteks azure_pg_admin.

Anda mungkin melihat bahwa jika pemilik tabel, yang tidak azure_pg_admin, mencoba menjalankan pg_repack, mereka akhirnya menerima kesalahan berikut:

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

Untuk menghindari kesalahan tersebut, jalankan pg_repack dari konteks azure_pg_admin.

pg_stat_statements

Ekstensi pg_stat_statements memberi Anda tampilan semua kueri yang berjalan di database Anda. Informasi ini berguna untuk memahami performa beban kerja kueri Anda pada sistem produksi.

Ekstensi pg_stat_statements telah dimuat sebelumnya di shared_preload_libraries setiap instans server fleksibel Azure Database for PostgreSQL untuk menyediakan sarana pelacakan statistik eksekusi pernyataan SQL.

Untuk alasan keamanan, Anda harus mengizinkandaftar ekstensi pg_stat_statements dan menginstalnya menggunakan perintah CREATE EXTENSION .

Pengaturan pg_stat_statements.track, yang mengontrol pernyataan apa yang dilacak ekstensi, default ke top, yang berarti semua pernyataan yang dikeluarkan langsung oleh klien dilacak. Dua tingkat pelacakan lainnya adalah none dan all. Setelan ini bisa dikonfigurasi sebagai parameter server.

Ada tradeoff antara informasi eksekusi kueri yang pg_stat_statements disediakan ekstensi pada performa server saat mencatat setiap pernyataan SQL. Jika Anda tidak secara aktif menggunakan pg_stat_statements ekstensi, kami sarankan Anda mengatur pg_stat_statements.track ke none. Beberapa layanan pemantauan pihak ketiga mungkin mengandalkan pg_stat_statements untuk memberikan wawasan performa kueri, jadi konfirmasi apakah itu masalahnya bagi Anda.

postgres_fdw

Ekstensi ini postgres_fdw memungkinkan Anda menyambungkan dari satu instans server fleksibel Azure Database for PostgreSQL ke database lain atau database lain di server yang sama. Azure Database for PostgreSQL mendukung koneksi masuk dan keluar ke server PostgreSQL apa pun. Server pengirim perlu memperbolehkan sambungan keluar ke server penerima. Demikian pula, server penerima perlu mengizinkan koneksi dari server pengirim.

Jika Anda berencana menggunakan ekstensi ini, sebaiknya sebarkan server Anda dengan integrasi jaringan virtual. Secara default, integrasi jaringan virtual memungkinkan koneksi antar server di jaringan virtual. Anda juga dapat memilih untuk menggunakan kelompok keamanan jaringan virtual untuk menyesuaikan akses.

pgstattuple

Saat menggunakan pgstattuple ekstensi untuk mencoba mendapatkan statistik tuple dari objek yang disimpan dalam pg_toast skema dalam versi Postgres 11 hingga 13, Anda menerima kesalahan "izin ditolak untuk skema pg_toast".

Izin ditolak untuk pg_toast skema

Pelanggan yang menggunakan PostgreSQL versi 11 hingga 13 pada instans server fleksibel Azure Database for PostgreSQL tidak dapat menggunakan pgstattuple ekstensi pada objek dalam pg_toast skema.

Di PostgreSQL 16 dan 17, pg_read_all_data peran secara otomatis diberikan kepada azure_pg_admin, memungkinkan pgstattuple untuk berfungsi dengan benar. Dalam PostgreSQL 14 dan 15, pelanggan dapat secara manual memberikan pg_read_all_data peran untuk azure_pg_admin mencapai hasil yang sama. Namun, di PostgreSQL 11 hingga 13, pg_read_all_data peran tersebut tidak ada.

Pelanggan tidak dapat secara langsung memberikan izin yang diperlukan. Jika Anda harus dapat menjalankan pgstattuple untuk mengakses objek di bawah pg_toast skema, lanjutkan untuk membuat permintaan dukungan Azure.

timescaleDB

timescaleDB Ekstensi ini adalah database seri waktu yang dikemas sebagai ekstensi untuk PostgreSQL. Ini menyediakan fungsi dan pengoptimalan analitik berorientasi waktu dan menskalakan Postgres untuk beban kerja rangkaian waktu. Pelajari selengkapnya tentang TimescaleDB, merek dagang terdaftar Timescale, Inc. Azure Database for PostgreSQL menyediakan edisi TimescaleDB Apache-2.

Menginstal TimescaleDB

Untuk menggunakan timescaleDB, pastikan Anda menambahkan ekstensi ke daftar putih, memuat pustakanya, dan menginstal ekstensi di database tempat Anda berencana menggunakan fungsionalitasnya.

Anda sekarang dapat membuat timescaleDB hypertable dari awal atau memigrasikan data rangkaian waktu yang ada di PostgreSQL.

Untuk informasi selengkapnya tentang memulihkan database Timescale menggunakan pg_dump dan pg_restore, lihat Dokumentasi Timescale.

Memulihkan database Timescale menggunakan timescaledb-backup

Saat menjalankan SELECT timescaledb_post_restore() prosedur, Anda mungkin mendapatkan izin yang ditolak saat memperbarui bendera timescaledb.restoring. Alasan mengapa Anda mendapatkan kesalahan ini adalah karena izin ALTER DATABASE yang terbatas di layanan database Cloud PaaS. Dalam hal ini, Anda dapat melakukan metode alternatif menggunakan timescaledb-backup alat untuk mencadangkan dan memulihkan database Timescale. Timescaledb-backup adalah program yang membuat pencadangan dan pemulihan database TimescaleDB lebih sederhana, kurang rawan kesalahan, dan lebih berkinerja.

Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Instal perangkat seperti yang dirinci di sini.

  2. Buat instans dan database server fleksibel Azure Database for PostgreSQL target.

  3. Aktifkan ekstensi Timescale.

  4. azure_pg_admin Berikan peran kepada pengguna yang digunakan oleh ts-restore.

  5. Jalankan pemulihan-ts untuk memulihkan database.

Detail selengkapnya tentang utilitas ini dapat ditemukan di sini.

Ekstensi dan peningkatan versi utama

Azure Database for PostgreSQL menawarkan fitur peningkatan versi utama di tempat yang melakukan peningkatan di tempat instans server fleksibel Azure Database for PostgreSQL, hanya dengan interaksi sederhana dari pengguna. Peningkatan versi utama di tempat menyederhanakan proses peningkatan Azure Database for PostgreSQL, meminimalkan gangguan pada pengguna dan aplikasi yang mengakses server. Peningkatan versi utama di tempat tidak mendukung ekstensi tertentu, dan ada beberapa batasan untuk meningkatkan ekstensi tertentu.

Ekstensi anon, Apache AGE, dblink, orafce, postgres_fdw, dan timescaledb tidak didukung untuk semua versi instans server fleksibel Azure Database for PostgreSQL saat menggunakan fitur pembaruan versi utama di tempat.

Modul dengan pertimbangan tertentu

Daftar berikut menghitung semua modul yang didukung yang memerlukan pertimbangan khusus saat digunakan dalam instans server fleksibel Azure Database for PostgreSQL:

  • pg_failover_slots

pg_failover_slots

Modul ini pg_failover_slots meningkatkan Azure Database for PostgreSQL saat beroperasi dengan replikasi logis serta server yang diaktifkan untuk ketersediaan tinggi. Ini secara efektif mengatasi tantangan dalam mesin PostgreSQL standar yang tidak mempertahankan slot replikasi logis setelah failover. Mempertahankan slot ini sangat penting untuk mencegah jeda replikasi atau ketidakcocokan data selama perubahan peran server utama, memastikan kelangsungan operasional dan integritas data.

Ekstensi menyederhanakan proses failover dengan mengelola transfer, pembersihan, dan sinkronisasi slot replikasi yang diperlukan, sehingga memberikan transisi yang mulus selama perubahan peran server.

Anda dapat menemukan informasi dan instruksi selengkapnya tentang menggunakan pg_failover_slots modul di halaman GitHub-nya.

Untuk menggunakan pg_failover_slots modul, pastikan pustakanya dimuat saat server dimulai.