PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

टाइमस्टैम्प फ़ील्ड को int8 में कैसे परिवर्तित करें? या बस कॉलम ड्रॉप करें और एक नया बनाएं?

सबसे पहले, उस int8 . को स्पष्ट किए बिना उद्देश्य अपरिभाषित है प्रतिनिधित्व करने जा रहा है। युग के बाद से सेकंड? मिलीसेकंड? माइक्रोसेकंड? (आपके विशेष मामले में सभी NULL मानों के साथ कोई फर्क नहीं पड़ेगा, लेकिन अगला पाठक गुमराह हो सकता है।)

इसके बाद, Postgres में timestamp . के लिए कोई कास्ट परिभाषित नहीं है --> bigint (मूल रूप से उसी कारण से)। USING . के लिए आपको एक मान्य व्यंजक की आवश्यकता है खंड।

मान लें कि आप माइक्रोसेकंड चाहते हैं क्योंकि यह पोस्टग्रेज़ टाइमस्टैम्प के मूल माइक्रोसेकंड रिज़ॉल्यूशन को संरक्षित कर रहा है, यह काम करेगा:

ALTER TABLE public.new_ambient_data
   ALTER COLUMN sensor_date TYPE int8 USING (extract(epoch FROM sensor_date)*1000000)::int8;

विशेष रूप से, टाइमस्टैम्प के लिए पोस्टग्रेज युग 2000-01-01 00:00:00 UTC से शुरू होता है, UNIX युग के विपरीत 1970-01-01 00:00:00 UTC से शुरू होता है। लेकिन extract() UNIX युग लौटाता है (जिसे वापस timestamptz . में बदला जा सकता है to_timestamp() के साथ ) तो सिर्फ आंतरिक मूल्य को परिवर्तित करने से काम नहीं चलेगा।

आपके विशेष मामले के लिए (सभी मान NULL ), text . का उपयोग करना आसान है कदम पत्थर के रूप में। प्रत्येक प्रकार को text . से और से कास्ट किया जा सकता है (जब तक मान संगत है)।

ALTER TABLE public.new_ambient_data
   ALTER COLUMN sensor_date TYPE int8 USING sensor_date::text::int8;

और हां, कॉलम को जगह में बदलने और इसे फिर से बनाने की तुलना में शायद सस्ता है। जबकि कॉलम सभी न्यूल है, ऑपरेशन किसी भी तरह से बहुत सस्ता है, क्योंकि कोई वास्तविक टुपल डेटा नहीं है, केवल न्यूल बिटमैप में थोड़ा सा है। कोई भी तरीका किसी तालिका को फिर से लिखने के लिए ट्रिगर नहीं करेगा।

एक नया जोड़ा गया कॉलम हमेशा कॉलम सूची के अंत में जाता है, जबकि परिवर्तित एक जगह पर रहता है। आप जो चाहते हैं उस पर निर्भर करता है।

अंत में, ऐसा न करें बिल्कुल भी। डेटा प्रकार timestamp (या timestamptz ) आमतौर पर अस्थायी जानकारी को सामान्य bigint . के रूप में संग्रहीत करने से बेहतर है कई तरह से। लॉरेन्ज़ के उत्तर में विवरण देखें!

देखें:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 300GB Postgis तालिका का धीमा अनुक्रमण

  2. रिमोट सिम्फनी 2 + नेटबीन्स वर्कफ़्लो (करतब। गिट)

  3. जांचें कि पोस्टग्रेज सरणी में NULL मौजूद है या नहीं

  4. Postgres . में आरक्षण से पहला निःशुल्क प्रारंभ समय कैसे प्राप्त करें?

  5. थोक में उपनाम बनाएं?