sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skapar man TimescaleDB Hypertable med tidspartitionering på icke unik tidsstämpel?

Det finns inget behov av att skapa unika begränsningar för tidsdimensionen. Detta fungerar:

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

Observera att primärnyckeln på id tas bort.

TimescaleDB kräver att varje unik begränsning eller primärnyckel inkluderar tidsdimensionen. Detta liknar begränsning av PostgreSQL i deklarativ partitionering för att inkludera partitionsnyckel i en unik begränsning:

TimescaleDB upprätthåller också unikhet i varje del individuellt. Att bibehålla unikhet över delar kan påverka intagsprestandan dramatiskt.

Det vanligaste tillvägagångssättet För att åtgärda problemet med den primära nyckeln är att skapa en sammansatt nyckel och inkludera tidsdimensionen som föreslås i frågan. Om indexet på tidsdimensionen inte behövs (inga förfrågningar förväntas endast i tid), kan index på tid-dimensionen undvikas:

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

Det är också möjligt att använda en heltalskolumn som tidsdimension. Det är viktigt att en sådan kolumn har tidsdimensionsegenskaper:värdet ökar med tiden, vilket är viktigt för insättningsprestanda, och frågor kommer att välja ett tidsintervall, vilket är avgörande för frågeprestanda över en stor databas. Det vanliga fallet är att lagra unix-epok.

Sedan id i event_hyper är SERIELL, kommer den att öka med tiden. Jag tvivlar dock på att frågorna kommer att välja intervallet på den. För fullständighetens skull kommer SQL att vara:

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. Hur man formaterar negativa tal med vinkelparenteser i Oracle

  2. Bygga frågor dynamiskt i skenor

  3. Databasautomatisering med Puppet:Implementering av MySQL &MariaDB-replikering

  4. Konstigt överallt