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。

Answers:


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。
— 2016年

您使用的是哪个版本?这是最近才添加的...尝试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帮助。谢谢。
— Zon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.