Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadamkan Bilangan Khusus Baris Isih dalam PostgreSQL Tanpa Kunci Utama?

Bagaimana untuk Memadamkan Bilangan Khusus Baris Isih dalam PostgreSQL Tanpa Kunci Utama?

Linda Hamilton
Linda Hamiltonasal
2024-12-31 05:27:101030semak imbas

How to Delete a Specific Number of Sorted Rows in PostgreSQL Without a Primary Key?

Memadamkan Bilangan Baris Tetap dengan Isih dalam PostgreSQL

Memadam baris dengan pengisihan boleh menjadi satu cabaran dalam PostgreSQL kerana pengehadannya dalam sintaks DELETE. Isu ini ditambah lagi dengan ketiadaan kunci utama, menjadikan penyelesaian subkueri tidak praktikal.

Untuk menangani cabaran ini, anda boleh menggunakan medan ctid, pengecam unik untuk setiap baris dalam jadual. Dengan memanfaatkan ctid, anda boleh membina pertanyaan yang menyasarkan baris tertentu untuk pemadaman berdasarkan kriteria pengisihan:

DELETE FROM ONLY logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);

Medan ctid menyediakan pengecam unik untuk setiap versi baris. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ia mungkin berubah jika baris dikemas kini atau dialihkan oleh VACUUM FULL. Selain itu, jika jadual log mempunyai jadual yang diwarisi, klausa PADAM DARI SAHAJA menghalang pemadaman baris secara tidak sengaja daripada jadual turunan.

Sekiranya jadual log dipisahkan, anda perlu memasukkan tableoid dalam pertanyaan untuk memastikan pemadaman berlaku hanya merentasi partition yang dimaksudkan:

DELETE FROM logtable
WHERE (tableoid,ctid) IN (
    SELECT tableoid,ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);

Menggunakan teknik ini, anda boleh memadamkan bilangan baris dengan berkesan berdasarkan kriteria pengisihan, sambil mengekalkan tingkah laku pemadaman tepat, memastikan bilangan baris yang ditentukan dialih keluar tanpa mengira cap masa pendua.

Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Bilangan Khusus Baris Isih dalam PostgreSQL Tanpa Kunci Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn