Memelihara Kiraan Pemadaman Baris dalam PostgreSQL Tanpa Isih dan Kunci Utama
Dalam PostgreSQL, ketidakupayaan untuk menggabungkan pesanan atau had dengan sintaks pemadaman menimbulkan cabaran apabila cuba memadamkan bilangan baris tertentu sambil mengekalkan susunannya mereka dipilih. Ini lebih rumit dengan ketiadaan kunci utama dalam jadual.
Penyelesaian: Menggunakan ctid
Untuk memintas pengehadan ini, kita boleh memanfaatkan ctid (Semasa Pengecam Tuple) bagi baris:
DELETE FROM ONLY logtable WHERE ctid IN ( SELECT ctid FROM logtable ORDER BY timestamp LIMIT 10 );
Ctid menyediakan satu pengecam untuk setiap versi baris dalam jadualnya. Dengan memilih ctids daripada 10 baris pertama yang diisih mengikut cap masa dan menggunakannya dalam pernyataan DELETE, kami boleh mengalih keluar bilangan baris yang diingini dengan berkesan, walaupun jika semua nilai cap masa adalah sama.
Pertimbangkan Dipartisi Jadual
Jika jadual log dipisahkan, kita perlu mengambil kira kemungkinan berbilang partition yang mengandungi baris dengan cap masa yang sama. Untuk mengelakkan pemadaman terlalu banyak baris, kami boleh memasukkan tableoid (pengecam jadual) dalam pertanyaan:
DELETE FROM logtable WHERE (tableoid,ctid) IN ( SELECT tableoid,ctid FROM logtable ORDER BY timestamp LIMIT 10 );
Ini memastikan pemadaman terhad kepada bilangan baris yang ditentukan dalam setiap partition.
Dengan menggunakan ctid dan tableoid, kami boleh melaksanakan fungsi yang diingini untuk memadamkan bilangan baris tetap dengan mengisih dalam PostgreSQL, walaupun tanpa kunci utama.
Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Bilangan Tertentu Baris Tertib dalam PostgreSQL Tanpa Kunci Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!