Jika Anda ingin melakukan query terhadap data yang tersebar di berbagai database, Anda dapat menggunakan fitur query lintas database dari AnalyticDB for PostgreSQL untuk meningkatkan efisiensi akses data.
Pengenalan
Database adalah unit tingkat tinggi dalam PostgreSQL. Database yang berbeda dalam suatu instance tidak dapat saling melakukan query terhadap data satu sama lain. Hal ini memastikan isolasi data antara bidang bisnis, namun menimbulkan ketidaknyamanan pada query lintas bidang bisnis atau database.
AnalyticDB for PostgreSQL memungkinkan Anda melakukan query lintas database dengan menggunakan pembungkus data asing (FDW). FDW dikembangkan berdasarkan arsitektur pemrosesan paralel masif (MPP) dari AnalyticDB for PostgreSQL dan memanfaatkan kemampuan performa node komputasi untuk meningkatkan efisiensi akses data dalam query lintas database.
Catatan penggunaan
Fitur query lintas database hanya didukung untuk versi minor berikut:
AnalyticDB for PostgreSQL V7.0 dalam mode penyimpanan elastis: V7.0.1.x dan yang lebih baru.
AnalyticDB for PostgreSQL V6.0 dalam mode penyimpanan elastis: V6.3.11.2 dan yang lebih baru.
AnalyticDB for PostgreSQL dalam mode Serverless: V1.0.6.x dan yang lebih baru.
Tabel asing FDW hanya mendukung operasi SELECT dan INSERT. Operasi UPDATE dan DELETE tidak didukung.
Hanya AnalyticDB for PostgreSQL V7.0 dalam mode penyimpanan elastis yang mendukung join pushdown dan aggregate pushdown.
Hanya optimizer Orca dalam AnalyticDB for PostgreSQL V7.0 dalam mode penyimpanan elastis yang dapat menghasilkan rencana eksekusi untuk tabel asing FDW. AnalyticDB for PostgreSQL V6.0 dalam mode penyimpanan elastis dan AnalyticDB for PostgreSQL dalam mode Serverless menggunakan optimizer asli untuk menghasilkan rencana eksekusi untuk tabel asing FDW.
Prosedur
Untuk mengaktifkan fitur query data antara database db01 dan db02 dari suatu instance AnalyticDB for PostgreSQL, ikuti langkah-langkah berikut. Setelah mengaktifkan fitur ini, Anda dapat mengakses tabel dari database db02 melalui database db01.
Gunakan alat psql untuk terhubung ke instance AnalyticDB for PostgreSQL. Untuk informasi lebih lanjut, lihat Koneksi klien.
Buat dua database bernama db01 dan db02.
CREATE DATABASE db01; CREATE DATABASE db02;Instal ekstensi greenplum_fdw dan gp_parallel_retrieve_cursor di database db01 dan db02. Untuk informasi lebih lanjut, lihat Instal, perbarui, dan hapus ekstensi.
Beralihlah ke database db02 dan siapkan data uji.
\c db02 CREATE SCHEMA s01; CREATE TABLE s01.t1(a int, b int, c text); INSERT INTO s01.t1 VALUES(generate_series(1,10),generate_series(11,20),'t1');Beralihlah ke database db01 dan buat server serta pemetaan pengguna.
Buat server.
\c db01 CREATE SERVER db02 FOREIGN DATA WRAPPER greenplum_fdw OPTIONS (host 'localhost', dbname 'db02');Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
host
Titik akhir yang digunakan untuk melakukan query lintas database. Atur parameter ini ke
localhost.dbname
Nama database sumber. Dalam contoh ini, parameter ini diatur ke
db02.Buat pemetaan pengguna. Untuk informasi lebih lanjut tentang pemetaan pengguna, lihat CREATE USER MAPPING.
CREATE USER MAPPING FOR CURRENT_USER SERVER db02 OPTIONS (user 'report', password '******');Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
user
Nama akun database yang digunakan untuk terhubung ke instance.
Akun database harus memiliki izin baca pada database db02. Jika Anda ingin melakukan operasi INSERT, izin tulis juga diperlukan. Untuk informasi tentang cara membuat akun database, lihat Buat dan kelola akun database.
password
Kata sandi akun database.
Aktifkan fitur query lintas database untuk database db01.
Anda dapat menggunakan salah satu metode berikut untuk mengaktifkan fitur query lintas database:
Buat tabel asing untuk tabel sumber.
CREATE SCHEMA s01; CREATE FOREIGN TABLE s01.t1(a int, b int) server db02 options(schema_name 's01', table_name 't1');Metode ini memiliki kelebihan dan kekurangan berikut:
Kelebihan: Anda dapat menentukan struktur DDL kustom untuk tabel asing. Sebagai contoh, tabel t1 di database db02 berisi bidang a, b, dan c, tetapi database db01 hanya berisi bidang a dan b. Dengan menggunakan metode ini, Anda dapat menentukan bidang saat membuat tabel asing.
Kekurangan: Anda harus mengetahui struktur DDL setiap tabel. Waktu yang lama diperlukan untuk mengimpor beberapa tabel asing sekaligus.
Impor semua tabel dari skema database sumber.
CREATE SCHEMA s01; IMPORT FOREIGN SCHEMA s01 LIMIT TO (t1, t2, t3) FROM SERVER db02 INTO s01;Metode ini memiliki kelebihan dan kekurangan berikut:
Kelebihan: Anda dapat mengimpor tabel asing dalam waktu singkat. Anda tidak perlu mengetahui struktur DDL setiap tabel.
Kekurangan: Tabel asing harus memiliki nama dan bidang yang sama dengan tabel di database sumber.
Untuk informasi lebih lanjut, lihat IMPORT FOREIGN SCHEMA.
Query data dari database db02 melalui database db01.
Query data dari database db01.
SELECT * FROM s01.t1;Contoh hasil:
a | b | c ----+----+---- 2 | 12 | t1 3 | 13 | t1 4 | 14 | t1 7 | 17 | t1 8 | 18 | t1 1 | 11 | t1 5 | 15 | t1 6 | 16 | t1 9 | 19 | t1 10 | 20 | t1 (10 baris)
Referensi
AnalyticDB for PostgreSQL mendukung fitur query lintas instance. Untuk informasi lebih lanjut, lihat Query lintas instance.