psql 9.5: gen_random_uuid () tidak berfungsi

16

SELECT gen_random_uuid()

menghasilkan output

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.

Saya berlari CREATE EXTENSION pgcrypto;pada database yang dipilih dan SELECT gen_random_bytes(1)bekerja dengan sempurna ( gen_random_bytestidak berfungsi pada database lain di mana pgcryptoekstensi tidak dibuat secara manual).

% psql --version
psql (PostgreSQL) 9.5.3

Versi Ubuntu adalah 16,04.

d9k
sumber

Jawaban:

27

Anda dapat memeriksa apakah fungsi didefinisikan menggunakan

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

atau:

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

jika kedua fungsi tidak didefinisikan maka Anda mungkin memiliki kesalahan dengan pembuatan ekstensi - cukup jatuhkan dan buat kembali:

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;
cohenjo
sumber
Fungsi to_regprocjuga tidak ada: ERROR: function to_regproc(unknown) does not exist.
d9k
Versi apa yang Anda gunakan? Ini baru saja ditambahkan ... Coba kueri pg_proc.
cohenjo
cohenjo, OK aku mengerti. select version()memberi saya PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...saya memutakhirkan Ubuntu dari 14,04 ke 16,04 tetapi server psql tidak ditingkatkan dengan benar, saya pikir. psql --versionbenar-benar menunjukkan kepada saya 9.5.3, itu sangat membingungkan saya.
d9k
1
Saya menginstal versi 9.5 postgresql tetapi tidak menggantikan versi 9.3 yang ada, itu baru saja mulai bersama tetapi di port lain! Jadi ada dua versi yang diinstal dan saya harus memindahkan dan meningkatkan basis data yang ada dari 9.3 menjadi 9.5 dengan tutorial ini wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian Tetapi bahkan setelah peningkatan ini untuk membuat gen_random_uuid()pekerjaan saya harus secara manual membuat ulang ekstensi ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) sebagai Anda berasumsi. Terima kasih, @cohenjo!
d9k
1
Saya menggunakan CREATE IF NOT EXISTSdan memiliki kesalahan ini. Konsekuen DROP EXTENSION pgcryptodan CREATE EXTENSION pgcryptomembantu. Terima kasih.
Zon