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

Bagaimana cara membuat TimescaleDB Hypertable dengan partisi waktu pada stempel waktu yang tidak unik?

Tidak perlu membuat batasan unik pada dimensi waktu. Ini berfungsi:

CREATE TABLE event (
  id serial,
  ts timestamp with time zone NOT NULL,
  details varchar(255) NOT NULL
);
SELECT create_hypertable('event', 'ts');

Perhatikan bahwa kunci utama pada id dihapus.

TimescaleDB mengharuskan setiap batasan unik atau kunci utama menyertakan dimensi waktu. Ini mirip dengan pembatasan PostgreSQL di partisi deklaratif untuk memasukkan kunci partisi ke dalam batasan unik:

TimescaleDB juga memberlakukan keunikan di setiap potongan secara individual. Mempertahankan keunikan di seluruh potongan dapat memengaruhi kinerja penyerapan secara dramatis.

Pendekatan paling umum untuk memperbaiki masalah dengan kunci utama adalah membuat kunci komposit dan memasukkan dimensi waktu seperti yang diusulkan dalam pertanyaan. Jika indeks pada dimensi waktu tidak diperlukan (tidak ada kueri yang diharapkan hanya pada waktu), maka indeks pada dimensi waktu dapat dihindari:

CREATE TABLE event_hyper (
  id serial,
  ts timestamp with time zone NOT NULL,
  details varchar(255) NOT NULL,
  PRIMARY KEY (id, ts)
);

SELECT create_hypertable('event_hyper', 'ts', create_default_indexes => FALSE);

Dimungkinkan juga untuk menggunakan kolom bilangan bulat sebagai dimensi waktu. Penting bahwa kolom tersebut memiliki properti dimensi waktu:nilainya meningkat dari waktu ke waktu, yang penting untuk kinerja penyisipan, dan kueri akan memilih rentang waktu, yang sangat penting untuk kinerja kueri pada database besar. Kasus umum adalah untuk menyimpan zaman unix.

Sejak id di event_hyper adalah SERIAL, itu akan meningkat seiring waktu. Namun, saya ragu kueri akan memilih rentang di atasnya. Untuk kelengkapan SQL akan menjadi:

CREATE TABLE event_hyper (
  id serial PRIMARY KEY,
  ts timestamp with time zone NOT NULL,
  details varchar(255) NOT NULL
);

SELECT create_hypertable('event_hyper', 'id', chunk_time_interval => 1000000);


  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 cara menginstal Npgsql sebagai penyedia data untuk ADO.NET Entity Framework?

  2. rake db:create throws database tidak ada kesalahan dengan postgresql

  3. Urutan PostgreSQL yang memastikan ID unik

  4. Kesulitan Mengakses DB Postgres Jarak Jauh di Heroku dari Aplikasi Web Node.js Lokal

  5. Mendapatkan ukuran lob di PostgreSQL