PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Copie Postgres à partir d'une variable avec des données CSV

Ce n'est pas possible avec le SQL COPY commande. COPY uniquement des copies d'un fichier ou STDIN .

Vous pouvez soit écrire le contenu de la variable dans un fichier, soit le diriger via STDIN. N'a de sens que pour plus de quelques lignes.

Je pense avoir mal compris votre question avant la mise à jour, vous n'avez probablement pas besoin de ceci :

Le chemin du fichier ne peut pas être échangé comme d'autres éléments de données, et vous ne pouvez pas utiliser une instruction préparée pour cela. Construire le tout avant d'exécuter ou de recourir au SQL dynamique avec une fonction côté serveur comme :

CREATE OR REPLACE FUNCTION f_cp(_file text)
  RETURNS void AS
$BODY$
BEGIN
EXECUTE format($$COPY zip_codes FROM %L DELIMITER ',' CSV$$, $1);
END
$BODY$
  LANGUAGE plpgsql;

Appel :

SELECT f_cp('/var/lib/postgres/sync/myfile.csv')

format() nécessite Postgres 9.1 ou version ultérieure.