Saya memiliki server PostgreSQL 9.5 di mana saya memiliki skrip yang membuat peran dan basis data untuk pengguna secara otomatis. Dalam basis data ini akan sangat membantu untuk mengaktifkan ekstensi spesifik (misalnya pgcrypto), tetapi seperti yang saya pahami, harus ada superuser untuk dijalankan CREATE EXTENSION
. Apakah ada cara untuk mengaktifkan ekstensi tersebut tanpa masuk secara manual dengan akun pengguna super?
12
template1
dan kemudian membuat setiap basis data pengguna daritemplate1
sukaCREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?Jawaban:
Dari dokumen tentang Ekstensi,
Nilai tidak disetel
pgcrypto.control
, jadi default ke true yang membutuhkan SuperUser.Ini berarti Anda tidak dapat
CREATE EXTENSION
hanya sebagai pemilik basis data, terlepas dari apa yang dibuat oleh dokumen tentang CREATE EXTENSION yang membuat Anda percaya.Saya berusaha keras mengaturnya
false
, dan tidak ada sukacita. C adalah bahasa yang tidak dipercaya dan Anda akan mendapatkannyaDari dokumen di pg_language
... tentu saja Anda dapat menjadikan
c
tepercayaUPDATE pg_language set lanpltrusted = true where lanname = 'c';
sebagai superuser. KemudianCREATE EXTENSION pgcrypto
akan berfungsi dengan baik sebagai non-superuser. Tapi, itu terdengar seperti ide yang buruk jika Anda harus khawatir tentang pengguna Anda mengunggah sumber ke direktori ekstensi Anda dan kemudian menginstalnya di database. Artinya, saya tidak akan sejauh itu. Saya akan menemukan cara lain untuk menguliti kucing ini.sumber
pg_dump
untuk mencegahnya membuang pernyataan tentang ekstensi? Saat ini saya harus menggunakan alat pemrosesan teks eksternal untuk menghapus pernyataan dari SQL yang dibuang olehpg_dump
.