J'essaye d'écrire une fonction pour obtenir la liste des objets dans le schéma à partir de Redshift. J'ai créé un lien de RDS PostgreSQL vers Redshift. La requête fonctionne très bien lorsqu'elle est invoquée individuellement, mais ne fonctionne pas lorsqu'elle est écrite dans une fonction avec des arguments. Je veux passer plusieurs arguments (noms de schéma), donc j'ai utilisé les arguments VARIADIC. La fonction ressemble ci-dessous -Fonctions Postgresql - Utilisation des arguments VARIADIC de type texte
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
;
La fonction compile bien et est créé avec succès, mais je ne suis pas en mesure de trouver un moyen de l'appeler -
utilisé ces appels jusqu'à présent, sans chance -
sélectionnez f_fetch_tables ('{public, pg_catalog}')
eRREUR: il n'y a pas de paramètre 1 $ Où: une erreur est survenue sur dblink Connec nommée "unnamed": impossible d'exécuter la requête .
select * from f_fetch_tables (VARIADIC '{public, pg_catalog}')
ERREUR: il n'y a aucun paramètre 1 $ Où: Une erreur est survenue sur la connexion dblink nommé "sans nom": ne pouvait pas exécuter la requête.
Toutes les suggestions seraient vraiment utiles.
Merci, Kamlesh
Merci @klin. Cela a fonctionné pour moi ..! –