psql 9.5: gen_random_uuid () nie działa

16

SELECT gen_random_uuid()

produkuje dane wyjściowe

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.

Uruchomiłem CREATE EXTENSION pgcrypto;wybraną bazę danych i SELECT gen_random_bytes(1)działa idealnie ( gen_random_bytesnie działa na innych bazach danych, w których pgcryptorozszerzenie nie zostało utworzone ręcznie).

% psql --version
psql (PostgreSQL) 9.5.3

Wersja Ubuntu to 16.04.

d9k
źródło

Odpowiedzi:

27

możesz sprawdzić, czy funkcje są zdefiniowane za pomocą

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

lub:

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

jeśli obie funkcje nie są zdefiniowane, prawdopodobnie wystąpił błąd podczas tworzenia rozszerzenia - po prostu upuść go i utwórz ponownie:

drop extension pgcrypto;
CREATE EXTENSION pgcrypto;
cohenjo
źródło
Funkcja to_regprocnie istnieje albo: ERROR: function to_regproc(unknown) does not exist.
d9k
Jakiej wersji używasz? Zostało to niedawno dodane ... Wypróbuj zapytanie pg_proc.
cohenjo
cohenjo, Ok, rozumiem. select version()dał mi, PostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...że zaktualizowałem Ubuntu z 14.04 do 16.04, ale myślę, że serwer psql nie został poprawnie zaktualizowany. psql --versionnaprawdę pokazuje mi 9.5.3, że bardzo mnie to myliło.
d9k
1
Zainstalowałem wersję 9.5 postgresql, ale to nie zastąpiło istniejącej wersji 9.3, po prostu zaczęło się obok, ale na drugim porcie! Były więc zainstalowane dwie wersje i musiałem przenieść i zaktualizować istniejące bazy danych z wersji 9.3 do 9.5 za pomocą tego samouczka wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian Ale nawet po tej aktualizacji, aby wykonać gen_random_uuid()pracę, musiałem ręcznie odtworzyć rozszerzenie ( drop extension pgcrypto; CREATE EXTENSION pgcrypto;) jako założyłeś. Dzięki, @cohenjo!
d9k
1
Użyłem CREATE IF NOT EXISTSi miałem ten błąd. Konsekwentny DROP EXTENSION pgcryptoi CREATE EXTENSION pgcryptopomógł. Dziękuję Ci.
Strefa