2010-09-30 10 views
5

मैं उबंटू 10.04 के साथ पोस्टग्रेएसक्यूएल 8.4.4 चला रहा हूं।उबंटू 10.04 पर PostgreSQL 8.4.4 के साथ यूयूआईडी कैसे उत्पन्न करें?

मैं यूयूआईडी उत्पन्न करने की कोशिश कर रहा हूं लेकिन इसे करने का कोई तरीका नहीं मिल रहा है।

postgres=# SELECT uuid_generate_v1(); 
ERROR: function uuid_generate_v1() does not exist 
LINE 1: SELECT uuid_generate_v1(); 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

किसी भी विचार:

मैं जब मैं कोशिश यह है कि मैं क्या मिलता है /usr/share/postgresql/8.4/contrib/uuid-ossp.sql

में UUID-ossp.sql है?

उत्तर

12

contrib में सामग्री स्वचालित रूप से नहीं चलती है। कार्यों को स्थापित करने के लिए आपको इसे स्वयं चलाने के लिए है। मुझे 8.4 संस्करण के बारे में पता नहीं है, लेकिन 8.3 संस्करण में यह केवल प्रति-डेटाबेस स्थापित करता प्रतीत होता है, इसलिए आप जिस डेटाबेस का उपयोग psql में कर रहे हैं उसे खोलें और \i /usr/share/postgresql/8.4/contrib/uuid-ossp.sql

+0

धन्यवाद। इसने काम कर दिया। जानकार अच्छा लगा ! – Spredzy

+0

हां, यह प्रति डेटाबेस है। आप टेम्पलेट 1 डेटाबेस में सबकुछ इंस्टॉल कर सकते हैं यह सुनिश्चित करने के लिए कि प्रत्येक डेटाबेस जो इस डेटाबेस का उपयोग अपने टेम्पलेट के रूप में करता है (यह डिफ़ॉल्ट है), सभी contrib मॉड्यूल सहित बनाया गया है। –

+0

पोस्टग्रेस्क्ल के वर्तमान संस्करणों के लिए (9.0+, मुझे लगता है), contrib मॉड्यूल एक्सटेंशन के रूप में पैक किया जाता है। एक्सटेंशन साफ ​​हैं क्योंकि उन्हें संस्करण, नामित और अनइंस्टॉल किया जा सकता है। उदाहरण के लिए, आप निम्न आदेश का उपयोग करके "uuid" स्कीमा में uuid फ़ंक्शंस इंस्टॉल कर सकते हैं: "एक्सटेंशन uuid-ossp schema uuid बनाएं"। फिर आप "uuid.uuid_generate_v4()" जैसे कार्यों तक पहुंच पाएंगे। –

1

मैंने इसे देखा PostgreSQL यात्रा करता है। यह pgcrypto contrib मॉड्यूल की आवश्यकता है।

CREATE OR REPLACE FUNCTION generate_uuid() RETURNS UUID AS 
$$ 
SELECT ENCODE(GEN_RANDOM_BYTES(16), 'hex')::UUID 
$$ LANGUAGE SQL IMMUTABLE; 
+1

हमारे पीछे के लिए कक्षा के, वास्तव में सामान/contrib में स्थापित सामान प्राप्त करने के लिए एक sudo apt-get postresresll-contrib स्थापित करें। @ पॉल धन्यवाद। –

+5

आपको फ़ंक्शन को 'IMMUTABLE' के रूप में घोषित नहीं करना चाहिए क्योंकि आप फ़ंक्शन मूल्यांकन के बजाय कैश किए गए पढ़ना नहीं चाहते हैं। यह सुनिश्चित करने के लिए कि फ़ंक्शन को हर बार कॉल किया जाता है, सुनिश्चित करने के लिए अपने कार्य को 'वोल्टाइल' के रूप में घोषित करें। आगे स्पष्टीकरण के लिए http://www.postgresql.org/docs/8.3/interactive/xfunc-volatility.html देखें। –

+0

जब मैं इस फ़ंक्शन को निष्पादित करता हूं तो मुझे यह मिलता है: त्रुटि: डुप्लिकेट कुंजी मान अद्वितीय बाधा "relation_pkey" विवरण का उल्लंघन करता है: कुंजी (आईडी) = (5a0cd072-6463-2cb0-9de9-42aabb85f270) पहले से मौजूद है। उपरोक्त वर्णित वोल्टाइल को चैनिंग हालांकि समस्या हल करती है। –

संबंधित मुद्दे