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
Я встановив 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допоміг. Дякую.
Зона
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.