Redshiftからスキーマ内のオブジェクトのリストを取得する関数を作成しようとしています。私はRDS PostgreSQLからRedshiftへのdblinkを作成しました。クエリは個別に呼び出されたときにうまく動作しますが、引数を持つ関数の内部に記述されているときは機能しません。私は複数の引数(スキーマ名)を渡したいので、VARIADIC引数を使用しました。関数は以下のように見える -Postgresql関数 - テキスト型の可変引数を使用
CREATE FUNCTION f_fetch_tables(VARIADIC list text[])
RETURNS VOID
AS $$
DECLARE
begin_time TIMESTAMP;
expire_time TIMESTAMP;
BEGIN
/* To fetch the list of all objects from Redshift */
EXECUTE 'drop table if exists tmp_rs_obj_list;
create table tmp_rs_obj_list as
SELECT * FROM dblink(''rs_link'',$REDSHIFT$ select * from (select schemaname,
tablename from pg_tables UNION select schemaname, viewname from pg_views) where schemaname
not in (array_to_string($1,'','')) $REDSHIFT$) AS t1 (schema_nm varchar(30), obj_nm varchar(100))' using list;
END;
$$
LANGUAGE plpgsql
;
機能は罰金コンパイルし、正常に作成されたが、私はそれを呼び出す方法を把握することはできませんよ -
は運なしで、これまでにこれらの呼び出しを使用します -
選択f_fetch_tables( '{公共、pg_catalogの}')
ERROR:エラーがデータベース・リンク接続に発生しました:パラメータがない場合は$ 1 "unnamed"という名前の: クエリを実行できませんでした。
はf_fetch_tables(VARIADIC '{公共、pg_catalogの}')SELECT * FROM
ERROR:何のパラメータは$ 1 どこにありません:エラーは、 "無名の" という名前のデータベース・リンク接続で発生しました:クエリを実行できませんでした。
ご意見は本当に役に立ちます。
は、この問題は、可変長のパラメータに関連していない、 Kamlesh
は@klinありがとうございます。これは私のために働いた..! –