PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да създадете TimescaleDB Hypertable с времево разделяне на неуникален времеви печат?

Няма нужда да създавате уникално ограничение на времевото измерение. Това работи:

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

Обърнете внимание, че първичният ключ на id се премахва.

TimescaleDB изисква всяко уникално ограничение или първичен ключ да включва измерението време. Това е подобно на ограничението на PostgreSQL в декларативно разделяне за включване на разделителен ключ в уникално ограничение:

TimescaleDB също налага уникалност във всяка част поотделно. Поддържането на уникалност в частите може драстично да повлияе на производителността при приемане.

Най-често срещаният подход за да коригирате проблема с първичния ключ е да създадете съставен ключ и да включите времевото измерение, както е предложено във въпроса. Ако индексът на времевата величина не е необходим (не се очакват заявки само по време), тогава индексът на времевата величина може да бъде избегнат:

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

Възможно е също така да се използва колона с цели числа като измерение на времето. Важно е такава колона да има свойства на измерението на времето:стойността се увеличава с течение на времето, което е важно за производителността на вмъкването, и заявките ще изберат времеви диапазон, който е от решаващо значение за производителността на заявките в голяма база данни. Често срещаният случай е за съхраняване на unix епоха.

Тъй като id в event_hyper е СЕРИЕН, ще се увеличава с времето. Съмнявам се обаче, че заявките ще изберат диапазона в него. За пълнота SQL ще бъде:

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. Java SQL ГРЕШКА:Връзка Table_Name не съществува

  2. Как да конвертирате полигонални данни в линейни сегменти с помощта на PostGIS

  3. Slick 2.0 Общи CRUD операции

  4. PostgreSQL - изберете count(*) за редове, където е изпълнено условие

  5. Регистрационни файлове на Heroku казват, че няма модул с име „urlparse“, когато използвам import urlparse