Mengelola objek besar dengan modul lo - Amazon Aurora

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 data lo adalah domain dari jenis data oid. Dengan kata lain, ini adalah ID objek dengan kendala opsional. Untuk informasi selengkapnya, lihat ID objek dalam 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 dalam dokumentasi PostgreSQL.

Menginstal ekstensi lo

Sebelum menginstal ekstensi lo, pastikan bahwa Anda memiliki hak istimewa rds_superuser.

Untuk menginstal ekstensi lo.
  1. 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 --password

    Jika diminta, masukkan kata sandi Anda. Klien psql menghubungkan dan menampilkan basis data koneksi administratif default, postgres=>, sebagai perintah.

  2. 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 postgres docs-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 dalam dokumentasi PostgreSQL.