Halaman ini menjelaskan pertimbangan utama dan langkah-langkah yang harus diikuti saat bermigrasi dari Spanner ke database dialek PostgreSQL lain jika Anda ingin memindahkan aplikasi dari Spanner atau Google Cloud. Anda juga dapat menggunakan informasi di halaman ini jika perlu memahami atau menunjukkan kelayakan pemindahan database, misalnya, untuk perencanaan bencana exit tertekan.
Antarmuka PostgreSQL Spanner adalah pilihan terbaik untuk aplikasi yang memerlukan opsi untuk di-deploy ke lingkungan lain yang kompatibel dengan PostgreSQL, baik dalam Google Cloud atau di tempat lain. Dengan menggunakan sintaksis yang sudah dikenal dan klien standar dari ekosistem PostgreSQL, antarmuka PostgreSQL memungkinkan developer dan operator menggunakan pengetahuan dan keterampilan PostgreSQL yang sudah ada.
Dialect ini menggunakan pemrosesan kueri, koordinasi transaksi, penyimpanan terdistribusi, dan infrastruktur jaringan yang sama dengan dialek GoogleSQL. Jika Anda memerlukan database yang mendukung portabilitas, Anda tidak akan mengorbankan skalabilitas inti, konsistensi, atau manfaat harga-performa Spanner saat memilih antarmuka PostgreSQL.
Pelajari lebih lanjut perbedaan antara dialek PostgreSQL dan GoogleSQL di Spanner.
Pada tingkat tinggi, langkah-langkahnya adalah sebagai berikut:
- Menghapus ekstensi khusus Spanner dari kueri dan pernyataan DDL
- Memigrasikan skema
- Memigrasikan data
- Memigrasikan aplikasi
Pertimbangan khusus Spanner
Antarmuka PostgreSQL Spanner mendukung kueri PostgreSQL secara langsung, sehingga sebagian besar kueri SQL yang berjalan di database dialek PostgreSQL Spanner memiliki perilaku yang sama dengan database lain yang kompatibel dengan PostgreSQL. Dengan menggunakan pendekatan ini, jumlah perubahan SQL dan akses data yang diperlukan untuk memindahkan aplikasi dari satu platform ke platform lain kemungkinan rendah. Hal ini membuat proses transfer menjadi lebih cepat, lebih mudah, dan kurang rentan terhadap error dibandingkan dengan database dialek GoogleSQL serupa.
Selain kompatibilitas PostgreSQL yang luas, antarmuka PostgreSQL menawarkan sejumlah ekstensi khusus Spanner. Jika menggunakan ekstensi ini di aplikasi, Anda harus menghapusnya atau memetakan ke fitur PostgreSQL secara manual. Beberapa contoh penting diberikan dalam ekstensi sintaksis kueri dan ekstensi Pengelolaan Skema (DDL).
Ekstensi sintaksis kueri
Antarmuka PostgreSQL Spanner menyediakan sejumlah ekstensi khusus Spanner. Sebagian besar menggunakan awalan spanner.
untuk identifikasi. Dalam tabel berikut, kami mencantumkan ekstensi ini dan
tindakan yang mungkin perlu Anda lakukan sebelum aplikasi yang sama dapat berjalan di
database PostgreSQL.
Jenis ekstensi | Ekstensi tertentu | Tindakan yang harus dilakukan sebelum migrasi |
Fungsi khusus Spanner |
|
Temukan fungsi yang diawali dengan spanner. dan hapus panggilan ini.
|
Ekstensi jenis |
|
Hapus sintaksis VECTOR LENGTH atau pertimbangkan untuk menggunakan
pgvector.
|
Sintaksis kueri | Tidak perlu tindakan apa pun karena petunjuk ditampilkan di dalam komentar.
Untuk mengetahui detail tentang pertimbangan performa, lihat Migrasi kueri. |
|
Prosedur sistem tersimpan | Hapus panggilan ke spanner.cancel_query() .
Jika ingin, Anda dapat mengganti panggilan dengan PostgreSQL yang setara. |
|
Operasi SET/SHOW | Dapat diabaikan karena PostgreSQL tidak memiliki parameter bawaan
yang dimulai dengan spanner. , sehingga menetapkan variabel apa pun
dengan awalan tersebut tidak akan berdampak pada perilaku yang diharapkan. |
Ekstensi Pengelolaan Skema (DDL)
Spanner menawarkan berbagai ekstensi yang terkait dengan pengelolaan data, seperti yang dijelaskan di halaman bahasa definisi data (DDL).
Ekstensi | Tindakan yang harus dilakukan sebelum migrasi |
Tabel yang diselingi
Menempatkan data terkait banyak-ke-satu dalam penyimpanan fisik, sehingga penggabungan di antara tabel tersebut menjadi jauh lebih efisien. |
Hapus klausa INTERLEAVE IN . |
Stempel waktu commit
Memungkinkan penyimpanan stempel waktu commit transaksi secara atomik ke dalam kolom. |
Ganti SPANNER.COMMIT_TIMESTAMP dengan jenis stempel waktu PostgreSQL dan kelola setelan stempel waktu di aplikasi Anda atau hapus kolom tersebut.
|
Pemulihan point-in-time
Memberikan perlindungan terhadap penghapusan atau penulisan yang tidak disengaja. |
Hapus semua pernyataan DDL yang menetapkan
spanner.version_retention_period .
|
Time to live (TTL)
Meminta penghapusan data secara otomatis berdasarkan usia. |
Hapus klausa TTL INTERVAL . Pertimbangkan untuk memanfaatkan
cron atau tugas terjadwal untuk menghapus data yang sudah tidak berlaku secara berkala.
baris.
|
Opsi pengoptimal
Menetapkan opsi untuk meminimalkan potensi regresi performa saat pengoptimal kueri atau statistik berubah. |
Hapus pernyataan DDL yang menetapkan opsi pengoptimal. |
Aliran data perubahan
Memantau dan men-streaming perubahan data database Spanner—penyisipan, pembaruan, dan penghapusan—hampir secara real time. |
Hapus semua pernyataan DDL yang terkait dengan aliran perubahan. |
Pemimpin default
Memungkinkan Anda menentukan pemimpin untuk database dalam konfigurasi dual-region dan multi-region. |
Hapus semua pernyataan DDL yang menetapkan spanner.default_leader .
|
Partisi geografis
Memungkinkan Anda menyegmentasikan dan menyimpan baris lebih lanjut di tabel database di seluruh konfigurasi instance yang berbeda. |
Hapus semua pernyataan DDL yang terkait dengan partisi geografis. |
Urutan
Spanner hanya mendukung urutan bit_reversed_positive . |
Ganti bit_reversed_positive dengan urutan yang tersedia di PostgreSQL. |
Migrasi Skema
Anda dapat mengekspor skema database dialek PostgreSQL dalam sintaksis PostgreSQL. Untuk database yang dikonfigurasi untuk menggunakan antarmuka PostgreSQL, Anda dapat melakukannya dengan psql
menggunakan PGAdapter, proxy sidecar yang memungkinkan Anda menggunakan driver PostgreSQL standar atau library klien untuk terhubung ke Spanner:
psql -v ON_ERROR_STOP=1 \
--host "$PGADAPTER_HOST" \
--port "$PGADAPTER_PORT" \
--dbname "$SPANNER_DATABASE" \
-qAtX \
-c "show database ddl"
Anda juga dapat menggunakan perintah gcloud
berikut untuk menghasilkan skema sebagai
skrip SQL yang kompatibel dengan PostgreSQL:
gcloud spanner databases ddl describe databasename
Jika database menggunakan ekstensi skema khusus Spanner, seperti yang dibahas dalam Ekstensi pengelolaan skema, ekstensi tersebut akan dicantumkan saat Anda menjalankan perintah ini. Anda harus menghapusnya sebelum memigrasikan skema ke PostgreSQL.
Migrasi data
Antarmuka PostgreSQL Spanner mendukung ekstensi COPY TO STDIN
dan STDOUT
PostgreSQL menggunakan PGAdapter. Ini adalah salah satu cara untuk memuat data ke dalam dan ke luar
Spanner. Baca selengkapnya tentang perintah COPY
di
dokumentasi alat command line psql untuk Spanner.
Skrip ini mengekspor data dalam jumlah yang lebih kecil (direkomendasikan untuk data kurang dari 100 GB) dari antarmuka PostgreSQL Spanner ke database PostgreSQL baru:
psql -h pgadapter-host -c "COPY $TABLE TO STDOUT BINARY" | \
psql -h postgresql-host -c "COPY $TABLE FROM STDIN BINARY"
Untuk tabel yang lebih besar (data lebih besar atau sama dengan 100 GB), Anda dapat meluncurkan ekspor Dataflow ke template CSV.
Anda dapat melakukan migrasi data live menggunakan konektor Debezium Kafka untuk menstreaming update Spanner ke PostgreSQL. Anda dapat menyesuaikannya lebih lanjut jika menggunakan Spanner Change Streams API untuk mengakses aliran Change Data Capture (CDC) secara langsung.
Migrasi kueri
Antarmuka PostgreSQL untuk Spanner mengimplementasikan sebagian besar sintaksis, fungsi, dan operator kueri PostgreSQL yang paling umum.
Jika menggunakan petunjuk dalam kueri, Anda tidak perlu menulis ulang kueri karena petunjuk kueri di Spanner ditentukan dalam komentar yang kompatibel dengan PostgreSQL:
SELECT s.FirstName, s.LastName,
s.SingerInfo, a.AlbumTitle, a.Charts
FROM Singers AS s
LEFT OUTER JOIN/*@JOIN_METHOD=APPLY_JOIN*/ Albums AS a
ON s.SingerId = a.SingerId;
Komentar ini diproses oleh perencana kueri Spanner, tetapi database PostgreSQL mengabaikannya, sehingga Anda dapat menyertakannya atau menghapusnya.
Untuk mencapai performa yang optimal di lingkungan baru, kueri dan skema database (seperti indeks) mungkin memerlukan pengoptimalan untuk lingkungan baru. Sebaiknya jalankan pemeriksaan benchmark untuk mengonfirmasi hal ini secara empiris.
Migrasi aplikasi
Dalam hal konektivitas dari aplikasi, strategi migrasi Anda bergantung pada pilihan awal yang dibuat saat mengonfigurasi aplikasi untuk menggunakan Spanner, seperti apakah Anda menggunakan driver PostgreSQL, driver Spanner, atau library klien Spanner. Bagian ini menjelaskan pertimbangan untuk setiap opsi.
Driver PostgreSQL
Spanner mendukung klien PostgreSQL umum menggunakan PGAdaper, proxy ringan yang menerjemahkan protokol wire PostgreSQL menjadi API kueri gRPC level rendah Spanner. Jika Anda menggunakan salah satu dari ini, perubahan ke target PostgreSQL yang berbeda akan melibatkan pembaruan string koneksi untuk mengarah langsung ke database PostgreSQL baru, bukan proxy PGAdapter. Pendekatan ini memberikan performa yang baik dan kompatibilitas yang kuat, sehingga cocok jika portabilitas adalah perhatian utama. Sebagian besar kueri yang berjalan di antarmuka PostgreSQL Spanner berfungsi sama di lingkungan PostgreSQL lainnya. Namun, hal sebaliknya tidak selalu berlaku; PostgreSQL mendukung sintaksis dan fitur yang tidak didukung Spanner.
Driver Spanner
Driver ini adalah implementasi khusus Spanner untuk bahasa umum dan framework aplikasi. Misalnya, driver JDBC Spanner (Java) mengimplementasikan API yang sama dengan yang diimplementasikan driver JDBC PostgreSQL, sehingga aplikasi yang menggunakan driver JDBC Spanner dapat memperbarui proses build untuk menautkan driver PostgreSQL bawaan yang setara saat ingin menjalankan aplikasi dengan PostgreSQL. Opsi ini paling cocok jika Anda sudah menggunakan Spanner atau jika Anda mencari solusi berperforma tinggi yang memanfaatkan fitur Spanner seperti Mutations API, yang tidak akan diekspos menggunakan driver PostgreSQL bawaan. Jika Anda memerlukan kompatibilitas penuh dengan driver bawaan dan portabilitas nilai, sebaiknya pertimbangkan untuk menggunakan driver bawaan PostgreSQL dengan PGAdapter untuk memastikan tingkat portabilitas aplikasi.
Untuk informasi selengkapnya, lihat Driver dan ORM PostgreSQL.
Library klien Spanner
Spanner juga menawarkan berbagai library klien idiomatis yang memberikan akses langsung ke Spanner tanpa menerapkan atau melalui antarmuka standar PostgreSQL. Klien ini memberikan akses maksimum ke fitur khusus Spanner, tetapi tidak kompatibel dengan API driver PostgreSQL. Opsi ini menawarkan tingkat performa fitur tertinggi, tetapi kurang portabel daripada opsi yang disebutkan di atas.
Langkah selanjutnya
- Pelajari cara memilih antara PostgreSQL dan GoogleSQL.
- Ikuti panduan memulai untuk membuat dan berinteraksi dengan database PostgreSQL.
- Pelajari lebih lanjut dukungan bahasa PostgreSQL Spanner.
- Pelajari PGAdapter.
- Pelajari repositori GitHub PGAdapter.
- Tinjau masalah umum di antarmuka PostgreSQL.