Je souhaite stocker les résultats de test sous la forme d'un fichier .CSV dans une base de données centrale. Le DB a un schéma qui ne correspond pas au fichier CSV. Idéalement, je passerais simplement le contenu du fichier CSV sous forme de chaîne directement au serveur et aurais une fonction qui pourrait transformer le fichier CSV en une table pouvant être jointe et utilisée dans un INSERT.Passer un paramètre CSV dans Postgres
Voici un exemple simplifié:
INSERT INTO MyTable
SELECT *
FROM parse_csv(csv_data) t
INNER JOIN Categories c
ON t.CatID=c.CatID
Note: csv_data est un varchar avec le contenu d'un fichier CSV. Notez également l'opération INNER JOIN effectuée directement sur la sortie de parse_csv. Quel est un moyen rapide d'écrire la fonction parse_csv() ci-dessus?
Je pense aussi à utiliser OPENXML et passer une chaîne XML, mais je ne trouve pas cette fonction sur Postgres. Voir this question. Je préfère ne pas analyser le fichier CSV dans le code de l'application et appeler INSERT un millier de fois. Cela pourrait être beaucoup d'allers-retours inutiles. Je connais la fonction COPY, mais j'ai plusieurs fichiers CSV du même format que je ne veux pas entrer en collision.
Je suis ouvert à toutes suggestions ou conseils.