Importer fichier sql node.js et de les exécuter à l'encontre de PostgreSQL
Je suis à la recherche d'un moyen efficace de prendre un raw sql fichier et de l'exécuter de manière synchrone sur une base de données postgres, qui s'apparente à si vous il a couru à travers psql
.
J'ai un fichier sql qui crée toutes les bases de données, importation de données, etc. J'ai besoin d'exécuter cette aide node.js mais impossible de trouver un module qui le fait automatiquement. Pour l'node.js l'application elle-même, nous utilisons nœud-postgres ('pg'), knex.js et bookshelf.js. Je suppose cependant que le pg est le meilleur pour ce.
Une alternative, je peux penser à est de lire l'intégralité de ce fichier, de le diviser par des points-virgules, remplacer les retours à la ligne avec des espaces, découper le double de l'espace, puis de l'injecter dans pg, un par un, de manière qu'elles sont exécutées de manière séquentielle, pas de manière asynchrone. Je suis un peu surpris de voir si c'est vraiment la façon la plus efficace et aussi si pas de bibliothèques existent encore à résoudre. Je suis un peu hésitant à sauter en elle, voyant que la syntaxe SQL peut lui-même être un peu difficile et j'ai accidentellement mash it up.
Quelques précisions à l'avance:
psql
ne peut pas être utilisé car il n'est pas installé sur la machine cible- J'ai choisi de développer et de contrôle de source sql dans sql natif de forme, parce qu'il est beaucoup plus facile pour un administrateur de base à utiliser et à manipuler
insert into table values(';');
OriginalL'auteur rgareth | 2014-03-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez juste séparer conséquente de requêtes avec un point-virgule lorsqu'il est passé à
client.query
Qui fonctionne:
Et, par conséquent, qui fonctionne aussi:
J'avais complètement pas de problèmes avec les sauts de ligne et les tabulations dans les fichiers SQL que ce soit. Vous pouvez ajouter un peu de
\n
s (même\r\n
s) et\t
s à mon exemple et il faudra encore travailler.cela a fonctionné pour moi pour ibm_db lib. J'ai été confrontée au même problème aussi, mais l'une des questions soulevées jusqu'à mon esprit. Qu'en Injection SQL?
OriginalL'auteur
J'ai écrit la fonction suivante, qui fonctionne pour mon cas. Il aurait été beaucoup plus simple si ce n'était pas pour:
batch
pour gérer la simultanéitéExtrait de Code:
Méfiez-vous que ce serait un échec si vous avez utilisé des points-virgules n'importe où sauf à mettre fin à des instructions SQL.
batch
est?github.com/visionmedia/batch
OriginalL'auteur