스크립트
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