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

cohenjo, โอเคเข้าใจแล้ว. select version()ให้PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...ฉันอัพเกรด Ubuntu จาก 14.04 เป็น 16.04 แต่เซิร์ฟเวอร์ psql ไม่ได้รับการอัพเกรดอย่างถูกต้องฉันคิดว่า psql --versionแสดงให้ฉันเห็นจริงๆ9.5.3ว่ามันทำให้ฉันสับสนมาก
d9k

1
ฉันติดตั้งรุ่น postgresql 9.5 แต่ไม่ได้แทนที่รุ่น 9.3 ที่มีอยู่มันเพิ่งเริ่มทำงานควบคู่ไปกับพอร์ตอื่น ๆ ! ดังนั้นจึงมีสองรุ่นที่ติดตั้งและฉันมีการย้ายและการอัพเกรดฐานข้อมูลที่มีอยู่ 9.3-9.5 กับการกวดวิชานี้wiki.postgresql.org/wiki/Using_pg_upgrade_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ช่วย ขอบคุณ.
Zon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.