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.

d9k
источник

Ответы:

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;
cohenjo
источник
Функция также to_regprocне существует: ERROR: function to_regproc(unknown) does not exist.
9
Какую версию ты используешь? Это было добавлено только недавно ... Попробуйте запрос pg_proc.
Коэнджо,
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
Я установил 9.5 версию postgresql, но она не заменила существующую версию 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помогло. Спасибо.
Зон