Postgres Merilis Fitur Baru yang Luar Biasa

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00Jadi ternyata semua pengembang yang bilang bro pakai saja Postgres untuk segalanya ternyata semakin
00:00:04benar dengan akan dirilisnya Postgres 19 yang mencakup dukungan asli untuk kueri grafik
00:00:10dan ini adalah fitur yang sangat keren. Jadi di video hari ini saya ingin membahas semua fitur utama
00:00:16untuk Postgres 19 dan juga melihat lebih dalam tentang kueri grafik secara khusus karena saya pikir ini
00:00:21dapat secara fundamental mengubah cara kita merancang kueri dan menggunakan Postgres.
00:00:30Jadi yang pertama adalah sesuatu yang disebut on conflict do select. Jika Anda ingin menyisipkan baris hanya jika
00:00:35belum ada dan bagaimanapun Anda ingin mengembalikan baris tersebut sebagai hasilnya, biasanya Anda memerlukan
00:00:40dua kueri untuk ini, yaitu insert dan select, dan ini adalah alur kerja yang sangat umum. Jadi di sini dalam contoh
00:00:45kita katakan bahwa kita akan memasukkan ke dalam tabel users email dan name, lalu kita berikan nilai-nilai tersebut, dan kemudian di
00:00:50akhir kita katakan on conflict untuk email do nothing returning star. Do nothing tidak memberikan apa pun kembali ketika baris
00:00:56sudah ada sehingga Anda menindaklanjutinya dengan select, tetapi secara bersamaan ini tidak bersifat atomik. Dengan versi 19 Anda dapat melakukan ini
00:01:03hanya dengan satu kueri. Insert into users memberikan email dan name, lalu kita katakan on conflict email do select
00:01:11returning star. Dan jika Anda ingin memodifikasi dalam kueri yang sama, kita dapat mengatakan insert into users lalu kita berikan
00:01:16nilai-nilai lagi on conflict untuk email do select for update returning id and name. Dan karena ini adalah satu
00:01:23pernyataan, ini bersifat atomik, Anda memasukkannya atau Anda memilihnya setiap saat dan ini adalah
00:01:29kasus penggunaan yang sangat umum dan akan sangat berguna. Jadi berikutnya adalah grafik, tetapi jika Anda menikmati ini, maka
00:01:34mengapa tidak berlangganan ke better stack untuk tetap mendapatkan informasi terbaru tentang teknologi. Sekarang seperti yang saya katakan sebelumnya, ini
00:01:39adalah fitur utama menurut saya. Jadi katakanlah Anda memiliki skema biasa untuk sebuah toko, Anda memiliki pelanggan,
00:01:44pesanan, dan produk ditambah dua tabel penghubung yang merangkai semuanya, dan Anda ingin tahu produk mana
00:01:50yang benar-benar dibeli oleh pelanggan tertentu. Di SQL, itu adalah rantai join di kelima tabel dan itu
00:01:56cukup dapat dikelola di sini tetapi menjadi sangat buruk dengan cepat untuk hubungan yang lebih kompleks. Nah, sekarang kita
00:02:02dapat mengueri semua ini sebagai grafik sehingga sintaks join yang kompleks itu sekarang menjadi sintaks grafik yang baru. Dan
00:02:08dengan join yang kompleks secara khusus, Anda akan melihat manfaat yang sangat besar di sini. Jadi kita berada di dalam penampil database
00:02:14kita di sini dan Anda dapat melihat kita memiliki semua tabel kita, kita punya produk, pesanan, event, kita punya
00:02:20pelanggan juga, dan kemudian kita memiliki tabel pivot untuk menghubungkan semua data ini. Jadi kita punya item pesanan
00:02:25dan pesanan pelanggan, dan sekarang mari kita coba jalankan kueri terhadap semua tabel ini. Jadi katakanlah misalnya
00:02:30saya memiliki pengguna ini yang bernama alice, saya ingin mencari tahu semua hal yang telah dipesan oleh alice. Untuk melakukan
00:02:35ini, saya harus melalui beberapa kueri join yang berbeda untuk menghubungkan semua tabel tersebut. Jadi saya akan menjalankan kueri ini
00:02:41yang memiliki empat pernyataan join terpisah di dalamnya dan meskipun ini tidak harus sulit
00:02:46untuk ditulis, itu sangat buruk, tetapi jika kita menjalankan ini, Anda dapat melihat bahwa kita dapat melihat semua hal yang telah dipesan alice,
00:02:51keyboard mekanik dan tetikus ergonomis, tetapi sekarang kita dapat menggunakan sintaks grafik untuk menyederhanakan ini secara masif.
00:02:57Jadi kita akan mengganti semua ini dengan sintaks grafik yang baru dan kita akan mengeksekusi ini lagi dan Anda dapat
00:03:03melihat kita mendapatkan hasil yang sama dan jika kita menyelaraskan semua ini, ini mulai menjadi lebih mudah dibaca sehingga Anda dapat melihat
00:03:07kita hanya pergi dari pelanggan ke pesanan pelanggan ke pesanan ke item pesanan ke produk. Jadi Anda bisa
00:03:13pada dasarnya mengikuti alur sederhana ini untuk melewati seluruh grafik yang menurut saya jauh lebih
00:03:19mudah dibaca. Jika Anda ingin memilih beberapa kolom juga, kita dapat melakukannya, kita memiliki kueri grafik yang sama
00:03:23di bagian atas di sini tetapi kemudian kita dapat menentukan kolom di bagian bawah dan kemudian kita memilih semua
00:03:27kolom yang ingin kita tampilkan dan dengan mengeksekusinya kita mendapatkan hasil di bagian bawah. Sekarang tidak satupun dari ini
00:03:32akan bekerja kecuali kita benar-benar telah membuat grafik sejak awal jadi kueri yang saya gunakan untuk
00:03:37menghasilkan grafik tersebut ada di sini kita katakan create property graph lalu kita beri nama my shop dan kemudian
00:03:42kita uraikan tabel vertex yang akan menjadi pelanggan, pesanan, dan produk jadi ini adalah
00:03:47hal-hal yang benar-benar menyimpan data dan kemudian kita memiliki tabel edge dan ini adalah hal-hal yang
00:03:52benar-benar membuat koneksi jadi tabel pivot dalam kasus kita itu adalah pesanan pelanggan dan item
00:03:57pesanan dan sintaks untuk ini sangat sederhana kita katakan untuk pesanan pelanggan sumbernya adalah pelanggan dan
00:04:02tujuannya adalah pesanan dan untuk item pesanan sumbernya adalah pesanan dan tujuannya adalah produk dan dengan
00:04:08itu terpasang, postgres sekarang akan menyadari setiap kali kita menjalankan kueri grafik bagaimana hubungan tersebut
00:04:14didefinisikan. Agar ini berhasil, Anda perlu membuat grafik tetapi ini tidak membuat tabel baru atau apa pun
00:04:19Anda hanya menunjuk ke lima tabel yang sudah Anda miliki, tiga yang benar-benar menyimpan data menjadi
00:04:23vertex dan dua tabel join menjadi edge, ini bekerja jauh lebih mirip seperti view sehingga skema Anda sebelumnya
00:04:29tetap sepenuhnya tidak berubah Anda hanya mendapatkan fungsionalitas tambahan ini di atasnya jadi di sini kita akan
00:04:35mengatakan create property graph kita akan menyebutnya my shop dan kemudian kita mulai menjelaskan bagaimana hubungan itu
00:04:40sebenarnya bekerja dan di sinilah kita melakukan semua pekerjaan untuk grafik dan itu berarti kueri
00:04:45dapat jauh lebih ramping daripada sintaks join masing-masing jadi apakah ini pengganti neo4j nah jika Anda menginginkan
00:04:52database grafik karena Anda memerlukan penyimpanan grafik dan kinerja penelusuran maka tidak dan database grafik khusus
00:04:58mungkin masih menjadi pilihan yang lebih baik tetapi jika Anda menginginkan ini karena menulis join 10 tabel di
00:05:03sql itu menyakitkan dan buruk maka ini pasti akan menguntungkan Anda dan akan jauh lebih bagus sebagai
00:05:09perbandingan. Fitur baru ketiga adalah repack dan yang ini tentang mendapatkan kembali ruang disk, postgres
00:05:15tidak pernah memperbarui baris di tempat, ia menulis versi baru dan meninggalkan yang lama dan vacuum hanya
00:05:21menandai ruang mati tersebut dapat digunakan kembali sehingga penggunaan disk Anda tidak pernah benar-benar turun, repack menulis ulang seluruh
00:05:27tabel ke dalam file baru tanpa ruang yang terbuang di dalamnya dan itulah yang mengembalikan ruang ke
00:05:33sistem operasi, Anda sebenarnya sudah dapat melakukan ini dengan vacuum full tetapi itu mengunci tabel untuk
00:05:38seluruh penulisan ulang sehingga untuk apa pun yang masif Anda tidak pernah menjalankannya dan itulah sebabnya orang akan menginstal
00:05:42ekstensi seperti pg repack tetapi sekarang kita mendapatkannya langsung di dalam postgres gunakan kata kunci concurrently dengan
00:05:49ini dan itu menjaga tabel tetap dapat dibaca dan ditulis saat repack bekerja, satu hal yang perlu diperhatikan di sini meskipun
00:05:54Anda membutuhkan cukup ruang disk kosong untuk salinan kedua tabel dan semua indeksnya sehingga Anda membutuhkan
00:06:00ruang cadangan untuk benar-benar merebut kembali lebih banyak ruang jadi ini bukan pengganti persis untuk pg repack tetapi untuk
00:06:06tabel normal itu melakukan pekerjaannya tanpa ekstensi. Oke sekarang kita akan melakukan putaran cepat untuk
00:06:11fitur yang tersisa di rilis 19, yang pertama adalah petunjuk kueri, postgres memutuskan bagaimana cara menjalankan
00:06:17kueri Anda dan itu dapat berubah pikiran seiring waktu sehingga kueri yang sudah baik selama satu tahun tiba-tiba menjadi lambat
00:06:22dan tidak ada yang berubah di kode Anda, modul baru bernama pg plan advice memungkinkan Anda menangkap rencana saat itu
00:06:28masih cepat dan menyematkannya sehingga selalu tetap seperti itu, jit sekarang dimatikan secara default, postgres mengompilasi kueri berat
00:06:36menjadi kode mesin tetapi ia memutuskan kapan harus repot dari estimasi biaya perencana dan catatan rilis
00:06:41mengatakan bahwa penentuan biaya tersebut sebenarnya tidak dapat diandalkan sehingga itu aktif pada kueri yang sebenarnya tidak
00:06:46membutuhkannya juga vacuum sekarang dapat membersihkan indeks Anda dengan beberapa pekerja secara paralel jadi lebih sedikit waktu
00:06:52yang dihabiskan untuk melakukan vacuum pada tabel besar, Anda harus mengaktifkan ini sendiri meskipun, Anda tahu ketika Anda menambahkan kolom ke
00:06:58melakukan select dan kemudian Anda harus menambahkan kolom yang sama ke group by juga, itu melakukan semua itu untuk Anda
00:07:03dan kata kunci copy sekarang dapat mengekspor langsung ke json jadi jika Anda telah mendump csv dan mengonversinya
00:07:09setelahnya Anda dapat berhenti melakukan itu jadi itulah postgres 19 beta 2 mendarat di bulan juli dan rilis finalnya
00:07:15diharapkan sekitar september atau oktober jadi jika Anda menjalankan sesuatu yang lebih lama ada baiknya mengunduh beta
00:07:21dan mengujinya sekarang dan jika Anda ingin melihat lebih banyak tentang postgres Anda sebenarnya dapat memeriksa
00:07:25rincian pg durable, itu menempatkan alur kerja tahan lama langsung di dalam postgres, saya warren dari
00:07:31betterstack terima kasih sudah menonton dan sampai jumpa di video berikutnya

핵심 요약

Postgres 19 memperkenalkan pembaruan besar termasuk kueri grafik asli, on conflict do select atomik, dan repack bersamaan untuk mengembalikan ruang disk secara efisien.

하이라이트

  • Postgres 19 menyertakan fitur on conflict do select yang mengeksekusi operasi insert dan select secara atomik dalam satu kueri.

  • Dukungan kueri grafik asli pada Postgres 19 memungkinkan pengelolaan hubungan antar-tabel menggunakan sintaks grafik alih-alih rantai join SQL yang rumit.

  • Perintah create property graph menetapkan tabel vertex dan edge untuk grafik properti tanpa mengubah skema tabel yang sudah ada.

  • Fitur repack bawaan di Postgres 19 menggunakan kata kunci concurrently untuk mengembalikan ruang disk tanpa mengunci tabel dari operasi baca dan tulis.

  • Modul pg plan advice memungkinkan penyimpanan rencana eksekusi kueri secara permanen untuk mencegah penurunan kinerja akibat perubahan keputusan perencana.

타임라인

Pengenalan Fitur On Conflict Do Select Atomik

  • Pernyataan on conflict do select menggabungkan operasi penyisipan dan pemilihan baris dalam satu kueri tunggal.
  • Eksekusi tunggal ini bersifat atomik untuk memastikan konsistensi data pada alur kerja sisip-atau-ambil.
  • Penggunaan klausa for update memungkinkan modifikasi data langsung di dalam kueri yang sama.

Alur kerja konvensional memerlukan dua kueri terpisah antara insert dan select yang tidak bersifat atomik saat menangani konflik baris. Postgres 19 menyelesaikan masalah ini dengan memungkinkan perintah seperti insert ke dalam tabel users dengan on conflict email do select returning star. Pendekatan ini menyederhanakan kode aplikasi sekaligus menjaga integritas transaksi secara bersamaan.

Penerapan Kueri Grafik Asli pada Skema Kompleks

  • Postgres 19 menyediakan dukungan kueri grafik untuk menyederhanakan hubungan relasional yang membutuhkan banyak join.
  • Perintah create property graph mendefinisikan tabel data sebagai vertex dan tabel pivot sebagai edge tanpa mengubah skema dasar.
  • Sintaks grafik mengurangi kerumitan pembacaan kueri yang sebelumnya melibatkan rantai join pada lima tabel atau lebih.

Penggunaan relasi kompleks seperti pelanggan, pesanan, dan produk biasanya memerlukan rantai join SQL yang panjang dan sulit dibaca. Fitur grafik baru memungkinkan penelusuran hubungan data melalui alur visual yang bersih dari pelanggan ke pesanan hingga produk. Meskipun bukan pengganti database grafik khusus untuk kebutuhan penyimpanan murni, fitur ini secara drastis mempermudah penulisan kueri relasional yang rumit.

Pengembalian Ruang Disk Melalui Repack Konkuren

  • Perintah repack menulis ulang seluruh tabel ke file baru untuk mengembalikan ruang disk yang kosong ke sistem operasi.
  • Penggunaan kata kunci concurrently menjaga tabel tetap dapat dibaca dan ditulis selama proses penulisan ulang berlangsung.
  • Proses ini membutuhkan ruang disk kosong tambahan yang cukup untuk menampung salinan kedua dari tabel beserta indeksnya.

Vacuum konvensional hanya menandai ruang mati agar dapat digunakan kembali tanpa benar-benar menurunkan penggunaan disk sistem operasi. Perintah vacuum full mampu merebut kembali ruang tersebut tetapi mengunci seluruh tabel dari penulisan. Postgres 19 menghadirkan solusi bawaan mirip pg repack dengan menambahkan dukungan konkuren sehingga pemeliharaan disk dapat berjalan tanpa mengganggu operasional sistem.

Penyempurnaan Performa dan Fitur Tambahan Postgres 19

  • Modul pg plan advice menyematkan rencana eksekusi kueri yang cepat untuk mencegah penurunan kinerja akibat perubahan perencana.
  • Kompilasi JIT kini dimatikan secara default karena estimasi biaya perencana seringkali tidak dapat diandalkan.
  • Operasi vacuum dapat membersihkan indeks secara paralel menggunakan beberapa pekerja sekaligus pada tabel besar.

Rilis versi 19 membawa berbagai peningkatan efisiensi operasional bagi pengembang basis data. Petunjuk kueri membantu mempertahankan kecepatan eksekusi yang konsisten dari waktu ke waktu. Selain itu, penambahan fitur ekspor langsung ke format json melalui perintah copy menghilangkan kebutuhan konversi manual dari berkas CSV.

커뮤니티 글

모든 글 보기