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 lo (ekstensi) adalah untuk pengguna database dan pengembang yang bekerja dengan SQL database Postgre melalui JDBC atau driver. ODBC Keduanya JDBC dan ODBC mengharapkan database untuk menangani penghapusan objek besar ketika referensi ke mereka berubah. Namun, Postgre SQL tidak bekerja seperti itu. Postgre SQL tidak berasumsi bahwa suatu objek harus dihapus ketika referensinya berubah. Hasilnya adalah bahwa objek tetap berada di disk, tidak direferensikan. Ekstensi lo mencakup fungsi yang Anda gunakan untuk memicu perubahan referensi untuk menghapus objek jika diperlukan.
Tip
Untuk menentukan apakah database Anda dapat memperoleh manfaat dari ekstensi lo, gunakan vacuumlo
utilitas untuk memeriksa objek besar yatim piatu. 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 Postgre SQL 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 tipe data objek besar (lo) yang dapat Anda gunakan untuk objek besar biner (BLOBs) dan objek besar lainnya. Tipe datalo
adalah domain dari jenis dataoid
. Dengan kata lain, ini adalah ID objek dengan batasan opsional. Untuk informasi selengkapnya, lihat Pengidentifikasi objek dalam dokumentasiSQL Postgre. Secara sederhana, Anda dapat menggunakan tipe lo
data untuk membedakan kolom database Anda yang menyimpan referensi objek besar dari pengidentifikasi objek lain (OIDs).-
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 lebih lanjut 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 utama cluster Aurora SQL Postgre DB Anda.psql --host=
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordSaat 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 DELETE pemicu BEFORE UPDATE OR pada setiap kolom untuk 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.
Menghapus benda-benda besar yatim piatu menggunakan vacuumlo
vacuumlo
Utilitas mengidentifikasi dan menghapus objek besar yatim piatu dari database. Utilitas ini telah tersedia sejak Postgre SQL 9.1.24. Jika pengguna database Anda secara rutin bekerja dengan objek besar, kami sarankan Anda menjalankan vacuumlo
sesekali untuk membersihkan objek besar yatim piatu.
Sebelum menginstal ekstensi lo, Anda dapat menggunakan vacuumlo
untuk menilai apakah cluster Aurora Postgre SQL DB 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 lebih lanjut tentang utilitas ini, lihat vacuumlo
Memahami cara kerja vacuumlo
vacuumlo
Perintah menghapus objek besar yatim piatu (LOs) dari SQL database Postgre Anda tanpa mempengaruhi atau bertentangan dengan tabel pengguna Anda.
Perintah berfungsi sebagai berikut:
-
vacuumlo
dimulai dengan membuat tabel sementara yang berisi semua Object IDs (OIDs) dari objek besar dalam database Anda. -
vacuumlo
kemudian memindai melalui setiap kolom dalam database yang menggunakan tipe dataoid
ataulo
. Jikavacuumlo
menemukan pencocokan OID di kolom ini, itu menghapus OID dari tabel sementara.vacuumlo
memeriksa hanya kolom yang diberi nama khususoid
ataulo
, bukan domain berdasarkan jenis ini. -
Entri yang tersisa dalam tabel sementara mewakili yatim piatuLOs, yang
vacuumlo
kemudian dihapus dengan aman.
Meningkatkan vacuumlo
kinerja
Anda berpotensi dapat meningkatkan kinerja vacuumlo
dengan meningkatkan ukuran batch menggunakan -l
opsi. Ini memungkinkan vacuumlo
untuk memproses lebih banyak LOs sekaligus.
Jika sistem Anda memiliki memori yang cukup dan Anda dapat mengakomodasi tabel sementara sepenuhnya dalam memori, meningkatkan temp_buffers
pengaturan di tingkat database dapat meningkatkan kinerja. Hal ini memungkinkan tabel untuk berada sepenuhnya dalam memori, yang dapat meningkatkan kinerja secara keseluruhan.
Berikut query memperkirakan ukuran tabel sementara:
SELECT pg_size_pretty(SUM(pg_column_size(oid))) estimated_lo_temp_table_size FROM pg_largeobject_metadata;
Pertimbangan untuk benda besar
Berikut ini Anda dapat menemukan beberapa pertimbangan penting untuk dicatat ketika bekerja dengan objek besar:
-
Vacuumlo
adalah satu-satunya solusi karena saat ini tidak ada metode lain untuk menghapus yatim piatuLOs. -
Alat seperti pglogis, replikasi logis asli, dan AWS DMS yang menggunakan teknologi replikasi tidak mendukung replikasi objek besar.
-
Saat merancang skema database Anda, hindari menggunakan objek besar bila memungkinkan dan pertimbangkan untuk menggunakan tipe data alternatif seperti
bytea
sebagai gantinya. -
Jalankan
vacuumlo
secara teratur, setidaknya setiap minggu, untuk mencegah masalah dengan yatim piatuLOs. -
Gunakan pemicu dengan
lo_manage
fungsi pada tabel yang menyimpan objek besar untuk membantu mencegah anak yatim piatu dibuatLOs.