sql >> Databáze >  >> RDS >> PostgreSQL

Jak vytvořit TimescaleDB Hypertable s časovým rozdělením na nejedinečné časové razítko?

Není potřeba vytvářet jedinečné omezení časové dimenze. Toto funguje:

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

Všimněte si, že primární klíč na id je odstraněn.

TimescaleDB vyžaduje, aby jakékoli jedinečné omezení nebo primární klíč zahrnovaly časovou dimenzi. Toto je podobné omezení PostgreSQL v deklarativního dělení zahrnout klíč oddílu do jedinečného omezení:

TimescaleDB také vynucuje jedinečnost v každém bloku jednotlivě. Zachování jedinečnosti napříč bloky může dramaticky ovlivnit výkon příjmu.

Nejběžnější přístup k vyřešení problému s primárním klíčem je vytvořit složený klíč a zahrnout časovou dimenzi, jak je navrženo v otázce. Pokud index v dimenzi času není potřeba (neočekávají se žádné dotazy pouze na čas), lze se indexu v dimenzi času vyhnout:

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

Jako časovou dimenzi je také možné použít celočíselný sloupec. Je důležité, aby takový sloupec měl vlastnosti časové dimenze:hodnota se postupem času zvyšuje, což je důležité pro výkon vkládání, a dotazy vyberou časový rozsah, který je kritický pro výkon dotazů ve velké databázi. Běžný případ je pro ukládání unixové epochy.

Od id v event_hyper je SÉRIOVÝ, bude se časem zvyšovat. Pochybuji však, že dotazy vyberou rozsah na něm. Pro úplnost SQL bude:

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. Získejte počet řádků z příkazu COPY

  2. ORA-01111 v MRP v databázi fyzického pohotovostního režimu

  3. Podpora Bool Oracle SQL

  4. spustit php, apache?