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 pgcryptoCREATE 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.