関数(ストアドプロシージャ)で取得しに行く場合、「SECURITY DEFINER(セキュリティを定義)」オプションを有効にしているなら、その関数のオーナーのシーケンスに対する権限をallにしておかないといけない。
(Usage権限はcurrvalおよびnextval関数を使うのに必要。
参考サイト:https://www.postgresql.jp/document/9.5/html/sql-grant.html)
INSERT文の後、
SELECT currval('test__id_seq') INTO i;
RETURN i;
みたいにすると良い。
currval()の引数、シングルクォータでしっかり囲んでおくのを忘れがちなので注意。
囲まないと実行時に「’test__id_seq’ 列は存在しません」みたいなエラーが出る。