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

Bagaimana cara memastikan entri dengan rentang waktu yang tidak tumpang tindih?

Anda berada di jalur yang benar. Tetapi sintaks untuk batasan pengecualian sedikit berbeda.

Bergantung pada definisi tabel yang dirahasiakan, Anda mungkin perlu memasang ekstensi (modul tambahan) btree_gist pertama. Sekali per db. Ini diperlukan untuk contoh saya karena kelas operator yang diperlukan tidak diinstal untuk tipe integer secara default:

CREATE EXTENSION btree_gist;

Lihat:

Kemudian:

CREATE TABLE registration  (
  tbl_id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
, col_a  integer NOT NULL
, col_b  integer NOT NULL
, valid_from timestamp
, valid_to   timestamp
, CONSTRAINT no_overlap
    EXCLUDE USING gist (col_a with =, col_b with =, tsrange(valid_from, valid_to) WITH &&)
);

Setiap kolom harus terdaftar dengan operatornya masing-masing.

Dan Anda memerlukan tipe rentang . Anda menyebutkan kolom terpisah valid_from dan valid_to . Dan Anda juga menyebutkan tsrange dan valid dalam perintah yang gagal. Itu membingungkan. Dengan asumsi dua timestamp kolom, indeks ekspresi dengan ekspresi tsrange(valid_from, valid_to) akan melakukannya.

Terkait:

Biasanya, timestamptz (tstzrange ) harus dipilih di atas timestamp (tsrange ). Lihat:

Mungkin , desain yang unggul akan menjadi hubungan satu-ke-banyak antara registration . Anda tabel dan entri 1-N dalam registration_range baru meja. Dan beberapa logika untuk menentukan entri yang valid saat ini (untuk titik waktu tertentu). Tergantung pada informasi yang lebih dirahasiakan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan item baru di kolom JSONB berdasarkan nilai bidang lain - postgres

  2. Postgresql dan jsonb - memasukkan kunci/nilai ke dalam array multi-level

  3. Bagaimana cara menginstal postgres dengan NSIS dengan semua parameter?

  4. Mengembangkan PostgreSQL untuk Windows, Bagian 3

  5. Kolom kesalahan c.CreatedOn tidak ada... di log PostgreSQL selama inisialisasi konteks pertama kode menggunakan penyedia Devart dotConnect