समय आयाम पर अद्वितीय बाधा उत्पन्न करने की कोई आवश्यकता नहीं है। यह काम करता है:
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);
समय आयाम के रूप में एक पूर्णांक स्तंभ का उपयोग करना भी संभव है। यह महत्वपूर्ण है कि इस तरह के कॉलम में समय आयाम गुण हों:समय के साथ मूल्य बढ़ रहा है, जो सम्मिलित प्रदर्शन के लिए महत्वपूर्ण है, और क्वेरी एक समय सीमा का चयन करेगी, जो बड़े डेटाबेस पर क्वेरी प्रदर्शन के लिए महत्वपूर्ण है। सामान्य मामला यूनिक्स युग को संग्रहीत करने के लिए है।
चूंकि id
event_hyper
. में SERIAL है, यह समय के साथ बढ़ेगा। हालांकि, मुझे संदेह है कि प्रश्न उस पर सीमा का चयन करेंगे। पूर्णता के लिए 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);