PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak utworzyć Hypertable TimescaleDB z partycjonowaniem czasu na nieunikalnym znaczniku czasu?

Nie ma potrzeby tworzenia unikalnego ograniczenia w wymiarze czasowym. To działa:

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

Zwróć uwagę, że klucz podstawowy w id zostanie usunięty.

TimescaleDB wymaga, aby każde ograniczenie unikatowe lub klucz podstawowy zawierały wymiar czasu. Jest to podobne do ograniczenia PostgreSQL w partycjonowaniu deklaratywnym aby dołączyć klucz partycji do ograniczenia unikatowego:

TimescaleDB wymusza również unikatowość każdego fragmentu indywidualnie. Utrzymanie unikalności w różnych porcjach może dramatycznie wpłynąć na wydajność pobierania.

Najczęstsze podejście Aby rozwiązać problem z kluczem podstawowym, należy utworzyć klucz złożony i uwzględnić wymiar czasu, jak zaproponowano w pytaniu. Jeśli indeks w wymiarze czasu nie jest potrzebny (nie oczekuje się zapytań tylko w czasie), można uniknąć indeksu w wymiarze czasu:

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);

Możliwe jest również użycie kolumny liczb całkowitych jako wymiaru czasu. Ważne jest, aby taka kolumna miała właściwości wymiaru czasu:wartość rośnie w czasie, co jest ważne dla wydajności wstawiania, a zapytania będą wybierać zakres czasu, który jest krytyczny dla wydajności zapytań w dużej bazie danych. Typowy przypadek służy do przechowywania epoki uniksowej.

Od id w event_hyper jest SERIAL, z czasem będzie wzrastać. Wątpię jednak, aby zapytania wyselekcjonowały na nim zakres. Dla kompletności SQL będzie:

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. Kolejność zwrotu wiersza SQL

  2. Schemat tworzenia PostgreSQL

  3. Sprawdź, czy sekwencja istnieje w Postgresie (plpgsql)

  4. PostgreSQL — nie znaleziono relacji.

  5. Przegląd nowych procedur składowanych w PostgreSQL 11