psql 9.5: gen_random_uuid () काम नहीं कर रहा है


16

SELECT gen_random_uuid()

उत्पादन करता है

ERROR:  function gen_random_uuid() does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.

मैं CREATE EXTENSION pgcrypto;चयनित डेटाबेस पर चला गया और SELECT gen_random_bytes(1)पूरी तरह से काम करता है ( gen_random_bytesअन्य डेटाबेस पर काम नहीं करता है जहां pgcryptoविस्तार मैन्युअल रूप से नहीं बनाया गया था)।

% psql --version
psql (PostgreSQL) 9.5.3

Ubuntu संस्करण 16.04 है।

जवाबों:


27

आप जाँच सकते हैं कि क्या फ़ंक्शन का उपयोग करके परिभाषित किया गया है

select pg_get_functiondef(to_regproc('gen_random_bytes'));
select pg_get_functiondef(to_regproc('gen_random_uuid'));

या:

select * from pg_proc where proname like 'gen_random_%';

यदि दोनों कार्यों को परिभाषित नहीं किया गया है, तो संभवतः आपको एक्सटेंशन निर्माण में त्रुटि हुई थी - बस इसे ड्रॉप करें और पुनः बनाएँ:

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;

फ़ंक्शन to_regprocमौजूद नहीं है ERROR: function to_regproc(unknown) does not exist:।
d9k

आप कौन सा संस्करण उपयोग कर रहे हैं? यह केवल हाल ही में जोड़ा गया था ... pg_proc क्वेरी आज़माएँ।
कोहेनो

cohenjo, ठीक है मैंने समझ लिया। select version()मुझे दिया कि PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...मैंने 14.04 से 16.04 तक उबंटू को अपग्रेड किया, लेकिन psql सर्वर को ठीक से अपग्रेड नहीं किया गया था, मुझे लगता है। psql --versionवास्तव में मुझे दिखाता है 9.5.3, इसने मुझे बहुत भ्रमित किया।
d9k 20

1
मैंने 9.5 पोस्टग्रैस्कल संस्करण स्थापित किया है, लेकिन यह मौजूदा 9.3 संस्करण को प्रतिस्थापित नहीं करता है, यह सिर्फ दूसरे के साथ शुरू हुआ लेकिन दूसरे बंदरगाह पर! इसलिए दो संस्करण स्थापित किए गए थे और मुझे मौजूदा डेटाबेस को 9.3 से 9.5 तक इस ट्यूटोरियल wiki.postgresql.org/wiki/Using_pg_upgrad_on_Ubuntu/Debian के साथ स्थानांतरित करना और अपग्रेड करना था, लेकिन gen_random_uuid()काम करने के लिए अपग्रेड करने के बाद भी मुझे मैन्युअल रूप से एक्सटेंशन ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) के रूप में फिर से बनाना पड़ा। आपने मान लिया। धन्यवाद, @cohenjo!
d9k

1
मैंने उपयोग किया CREATE IF NOT EXISTSऔर यह त्रुटि थी। नतीजतन DROP EXTENSION pgcryptoऔर CREATE EXTENSION pgcryptoमदद की। धन्यवाद।
जोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.