Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengelola objek besar dengan modul lo
Modul (ekstensi) lo ditujukan bagi pengguna dan pengembang basis data yang bekerja dengan basis data PostgreSQL melalui driver JDBC atau ODBC. Baik JDBC maupun ODBC mengharapkan basis data menangani penghapusan objek besar ketika referensi ke objek tersebut berubah. Namun, cara kerja PostgreSQL bukan seperti itu. PostgreSQL tidak berasumsi bahwa suatu objek harus dihapus ketika referensinya berubah. Hasilnya adalah bahwa objek tetap berda di disk, tidak direferensikan. Ekstensi lo mencakup fungsi yang Anda gunakan untuk memicu perubahan referensi untuk menghapus objek jika diperlukan.
Tip
Untuk menentukan apakah basis data Anda dapat memperoleh manfaat dari ekstensi lo, gunakan utilitas vacuumlo untuk memeriksa objek besar tak berinduk. Untuk mendapatkan hitungan objek tak berinduk tanpa mengambil tindakan apa pun, jalankan utilitas dengan opsi -n
(no-op). Untuk mempelajari caranya, lihat vacuumlo utility berikut.
Modul lo tersedia untuk Aurora PostgreSQL 13.7, 12.11, 11.16, 10.21, dan versi minor yang lebih tinggi.
Untuk menginstal modul (ekstensi), Anda memerlukan hak istimewa rds_superuser
. Menginstal ekstensi lo akan menambahkan berikut ke basis data Anda:
lo
– Ini adalah jenis data objek besar (lo) yang dapat digunakan untuk objek besar biner (BLOB) dan objek besar lainnya. Tipe datalo
adalah domain dari jenis dataoid
. Dengan kata lain, ini adalah ID objek dengan kendala opsional. Untuk informasi selengkapnya, lihat ID objekdalam dokumentasi PostgreSQL. Sederhananya, Anda dapat menggunakan jenis data lo
untuk membedakan kolom basis data yang menyimpan referensi objek besar dengan ID objek lain (OID).-
lo_manage
– Ini adalah fungsi yang dapat digunakan dalam pemicu pada kolom tabel yang berisi referensi objek besar. Setiap kali Anda menghapus atau mengubah nilai yang mereferensikan objek besar, pemicu akan memutuskan tautan objek (lo_unlink
) dari referensinya. Gunakan pemicu pada kolom hanya jika kolom tersebut adalah referensi basis data tunggal ke objek besar.
Untuk informasi selengkapnya tentang modul objek besar, lihat lo
Menginstal ekstensi lo
Sebelum menginstal ekstensi lo, pastikan bahwa Anda memiliki hak istimewa rds_superuser
.
Untuk menginstal ekstensi lo.
Gunakan
psql
untuk terhubung ke instans DB primer dari klaster DB Aurora PostgreSQL Anda.psql --host=
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordJika diminta, masukkan kata sandi Anda. Klien
psql
menghubungkan dan menampilkan basis data koneksi administratif default,postgres=>
, sebagai perintah.Instal ekstensi seperti berikut.
postgres=>
CREATE EXTENSION lo;
CREATE EXTENSION
Anda kini dapat menggunakan jenis data lo
untuk menentukan kolom dalam tabel Anda. Misalnya, Anda dapat membuat tabel (images
) yang berisi data citra raster. Anda dapat menggunakan jenis data lo
untuk kolom raster
, seperti yang ditunjukkan pada contoh berikut, yang membuat tabel.
postgres=>
CREATE TABLE images (image_name text, raster lo);
Menggunakan fungsi pemicu lo_manage untuk menghapus objek
Anda dapat menggunakan fungsi lo_manage
dalam pemicu pada lo
atau kolom objek besar lainnya untuk membersihkan (dan mencegah objek tak berinduk) ketika lo
diperbarui atau dihapus.
Untuk menyiapkan pemicu pada kolom yang mereferensikan objek besar
Lakukan salah satu langkah berikut:
-
Buat pemicu BEFORE UPDATE OR DELETE pada setiap kolom agar berisi referensi unik ke objek besar, menggunakan nama kolom untuk argumen.
postgres=>
CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster); -
Terapkan pemicu hanya ketika kolom sedang diperbarui.
postgres=>
CREATE TRIGGER t_raster BEFORE UPDATE OF images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);
-
Fungsi lo_manage
pemicu hanya berfungsi saat memasukkan atau menghapus data kolom, bergantung pada bagaimana Anda mendefinisikan pemicu. Ini tidak berpengaruh ketika Anda melakukan operasi DROP
atau TRUNCATE
pada basis data. Berarti Anda harus menghapus kolom objek dari tabel apa pun sebelum hilang, untuk mencegah pembuatan objek tak berinduk.
Misalnya, anggaplah Anda ingin menghilangkan basis data yang berisi tabel images
. Anda menghapus kolom sebagai berikut.
postgres=>
DELETE FROM images COLUMN raster
Dengan asumsi bahwa fungsi lo_manage
didefinisikan pada kolom itu untuk menangani penghapusan, Anda sekarang dapat dengan aman menghilangkan tabel.
Menggunakan utilitas vacuumlo
Utilitas vacuumlo mengidentifikasi dan dapat menghapus objek besar tak berinduk dari basis data. Utilitas ini telah tersedia sejak PostgreSQL 9.1.24. Jika pengguna basis data Anda secara rutin bekerja dengan objek besar, sebaiknya Anda menjalankan vacuumlo sesekali untuk membersihkan objek besar tak berinduk.
Sebelum menginstal ekstensi lo, Anda dapat menggunakan vacuumlo untuk menilai apakah klaster DB Aurora PostgreSQL Anda dapat memperoleh manfaat. Untuk melakukannya, jalankan vacuumlo
dengan opsi -n
(no-op) untuk menunjukkan apa yang akan dihapus, seperti yang ditunjukkan berikut:
$
vacuumlo -v -n -h
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com -p 5433 -U postgresdocs-lab-spatial-db
Password:
*****
Connected to database "docs-lab-spatial-db" Test run: no large objects will be removed! Would remove 0 large objects from database "docs-lab-spatial-db".
Seperti yang ditunjukkan output, objek besar tak berinduk tidak menjadi masalah untuk basis data khusus ini.
Untuk informasi selengkapnya, lihat vacuumlo