PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

apa cara yang baik untuk pecahan horizontal di postgresql

PostgreSQL memungkinkan partisi dalam dua cara berbeda. Satu berdasarkan rentang dan yang lainnya berdasarkan daftar. Keduanya menggunakan pewarisan tabel untuk melakukan partisi.
Mempartisi menurut rentang, biasanya rentang tanggal, adalah yang paling umum, tetapi mempartisi menurut daftar dapat berguna jika variabel yang merupakan partisi statis dan tidak miring.

Partisi dilakukan dengan pewarisan tabel sehingga hal pertama yang harus dilakukan adalah menyiapkan tabel anak baru.

CREATE TABLE measurement (
    x        int not null,
    y        date not null,
    z        int
);

CREATE TABLE measurement_y2006 ( 
    CHECK ( logdate >= DATE '2006-01-01' AND logdate < DATE '2007-01-01' )
) INHERITS (measurement);

CREATE TABLE measurement_y2007 (
    CHECK ( logdate >= DATE '2007-01-01' AND logdate < DATE '2008-01-01' ) 
) INHERITS (measurement);

Kemudian aturan atau pemicu perlu digunakan untuk meletakkan data di tabel yang benar. Aturan lebih cepat pada pembaruan massal, pemicu pada pembaruan tunggal serta lebih mudah dikelola. Berikut adalah contoh pemicu.

CREATE TRIGGER insert_measurement_trigger
    BEFORE INSERT ON measurement
    FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();

dan fungsi trigger untuk melakukan insert

CREATE OR REPLACE FUNCTION measurement_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
    IF ( NEW.logdate >= DATE '2006-01-01' 
         AND NEW.logdate < DATE '2007-01-01' ) THEN
        INSERT INTO measurement_y2006 VALUES (NEW.*);
    ELSIF ( NEW.logdate >= DATE '2007-01-01' 
            AND NEW.logdate < DATE '2008-01-01' ) THEN
        INSERT INTO measurement_y2006m03 VALUES (NEW.*);
    ELSE
        RAISE EXCEPTION 'Date out of range.';
    END IF;
    RETURN NULL;
END;
$$
LANGUAGE plpgsql;

Contoh-contoh ini adalah versi sederhana dari dokumentasi postgresql agar lebih mudah dibaca.

Saya tidak akrab dengan pgpool2, tetapi gridsql adalah produk komersial yang dirancang untuk EnterpriseDB, database komersial yang dibangun di atas postgresql. Produk mereka sangat bagus, tetapi menurut saya itu tidak akan berfungsi pada postgresl standar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana justify_days() Bekerja di PostgreSQL

  2. Python/postgres/psycopg2:mendapatkan ID baris yang baru saja dimasukkan

  3. Nomor seri per grup baris untuk kunci majemuk

  4. Menggunakan periode variabel dalam interval di Postgres

  5. PostgreSQL :berikan string hingga saat ini DD/MM/YYYY