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 16

どのバージョンを使用していますか?これは最近追加されたばかりです... pg_procクエリを試してください。
コヘンジョ16

cohenjo、 はい、分かりました。select version()私を与えたPostgreSQL 9.3.12 on x86_64-unknown-linux-gnu...私は14.04から16.04へのUbuntuをアップグレードしたが、psqlのサーバが正しくアップグレードされなかった、私は思います。psql --version私を本当に9.5.3混乱させます。
d9k 16

1
9.5のpostgresqlバージョンをインストールしましたが、既存の9.3バージョンを置き換えるものではなく、他のポートで一緒に開始されました!そのため、2つのバージョンがインストールされており、このチュートリアルwiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debianを使用して既存のデータベースを9.3から9.5に移動およびアップグレードする必要がありましたが、このアップグレードの後でもgen_random_uuid()手動で拡張機能(drop extension pgcrypto; CREATE EXTENSION pgcrypto;)を再作成する必要がありましたあなたが仮定した。ありがとう、@ cohenjo!
d9k 16

1
CREATE IF NOT EXISTSはこのエラーを使用しました。その結果DROP EXTENSION pgcryptoCREATE EXTENSION pgcrypto助けた。ありがとうございました。
ゾン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.