8
votes

Quelle langue à utiliser pour script postgreSQL?

Je suis sur le point de vous lancer dans un projet PostgreSQL pour un client. Ils veulent développer une énorme base de données professionnelle avec de nombreuses jointures complexes, alors après la considération, j'ai choisi d'aller avec PostgreSQL sur MySQL .

Une considération importante est de savoir comment interfacer efficacement avec la base de données avec des scripts. Actuellement, le client utilise environ un million de scripts pour importer et remodeler les données à leurs besoins, mais n'utilise aucune base de données (sauf si vous envisagez que les fichiers CSV soient une base de données). Avec l'arrivée d'une structure de base de données avec des requêtes et des vues, la nécessité de scripts sera inférieure, mais l'importation devra toujours être faite souvent et l'exportation / reporting également. Pour moi, le résultat final idéal serait une série de scripts standardisés, de préférence avec une interface Web, de sorte que le client puisse effectuer des tâches régulières rapidement et sans erreur avec un clic sur le bouton.

Ma question est quelle approche de script sera la plus appropriée. Probablement une langue de script avec un postgre ou un plug-in ODBC suffirait, mais je cherche à faire un choix intelligent à long terme. Quelqu'un a-t-il de l'expérience avec cela? Est-ce que Postgres propose une langue de script interne et est-il facile de construire une interface graphique pour cela? Existe-t-il des outils standardisés disponibles pour importer / exporter et sont-ils suffisamment personnalisables pour permettre la normalisation des tâches au niveau du clic? Que diriez-vous de php ou de perl?

Merci d'avance. Toute astuces, ressources, looks perplexes ou gestes pitoyables sera vraiment apprécié; -)


3 commentaires

Ils ont un serveur Windows, IIS et SBS. Je suis tenté d'installer sur celui-ci car il a des charges de mémoire et de plusieurs processeurs, bien que je préfère une machine UNIX dédiée.


Quelles langues connaissez-vous? Êtes-vous dans un horaire serré ou avez-vous le temps d'apprendre de nouvelles langues?


Je n'ai que de l'expérience avec PHP, en ce qui concerne les langues de script. Je sais que c aussi, mais cela ne me semble pas très pratique pour le travail. J'ai assez d'air dans l'horaire, je peux donc apprendre de nouvelles langues, tant que la courbe d'apprentissage n'est pas trop raide. J'aimerais apprendre Perl, si seulement pour pouvoir porter des chemises et des chapeaux de Perlmonger ';)


4 Réponses :


4
votes

Depuis que vous parlez de scripts qui manipulent expressément la base de données, je commencerais avec les outils les plus indigènes.

  • SQL et PL / PGSQL Fonctions stockées pour manipuler et traiter les données
  • copie de et copie sur pour importer et exporter vers des fichiers plats
  • Un outil ETL pour tout remodelage qui ne peut pas être traité avec ce qui précède

    Maintenant, vous souhaitez fournir une interface Web facile pour interfacer avec ces scripts. Ici, la meilleure langue est probablement celle que vous ou votre équipe connaît déjà. Toutes les principales langues ont des pilotes Postgres. La langue que vous choisissez aura très peu d'impact si vous conservez vos tâches de manipulation de données au calque de base de données.

    Une chose à considérer, c'est combien de temps le script typique prendra pour exécuter. S'il est plus de quelques minutes, je vous suggère de le découler à partir de l'interface Web. Dans ce cas, l'interface Web doit permettre à l'utilisateur de faire la queue du script de démarrer afin que le serveur puisse l'exécuter indépendant du cycle de requête Web.


3 commentaires

Ceci est un conseil solide. Merci. En attente d'autres idées, je suis enclin à choisir PHP dans un cadre tel que Symphony, en utilisant Ajax pour placer les appels de base de données.


Mise à jour: J'ai maintenant utilisé un serveur M $ SQL pendant un certain temps au lieu de Postgres, et j'ai trouvé que les fonctions internes T-SQL et les packages SSIS (ETL) sont plus rapides que toutes les autres langues de script reliant ODBC. Je suis enclin à penser que c'est la même chose pour les postgres. Je conseillerais donc à quiconque, commencez par des procédures stockées internes, puis regardez d'autres possibilités de script.


Petit addition: et vous avez également raison sur l'interface Web. Il est bien plus rapide de laisser l'interface Web d'appeler des procédures stockées natives que de faire des scripts ou de la manipulation dans votre PHP / ASP / quel que soit le site Web.



1
votes

J'utilise Perl. Je le suggérerais aussi. En ce qui concerne les langages de script de base de données que Postgres offre: pl / perl est beaucoup plus développé que pl / php et pl / perlu apporte le CPANO Postgres.

Vous avez toujours pl / sql (idéal pour les petites choses) et pl / pgsql (a également ses applications).

Malheureusement, le soutien de la CSV sur Postgres est un type de crofty, je vais commencer un projet Perl très bientôt pour résoudre ce problème (probablement dans le mois prochain). Actuellement, vous devez presque utiliser PGloader qui (IMHO) a une syntaxe de Kludgey. Perl a Texte :: CSV_XS , qui est une goodse pour traiter les CSV.

Perl a historiquement fait accès à la base de données et utiliser beaucoup mieux que php. Je crois toujours que c'est un bon sens devant PHP. PHP manque toujours d'un cadre asynchrone et est plutôt limité au Web. Les points forts de PHP ont tendance à être beaucoup plus centrés sur des caractéristiques non techniques de la langue, à savoir la courbe d'apprentissage et la portabilité d'hôte partagée.


6 commentaires

Pourquoi pgloader? Qu'en est-il de "Copier de avec CSV"? Je n'ai jamais eu de problèmes avec ceux de PSQL et de PERL / DBD :: pg.


Merci. C'est toutes les informations très utiles pour moi. Peut-être une question idiote, mais est pl / perl une perl à part entière dans laquelle je peux utiliser texte :: csv_xs ou dois-je avoir besoin pl / pérlu < / code> pour cela?


@Matthew Wood: Dans la copie du monde réel *, comme actuellement mis en œuvre n'est jamais suffisante, je suis l'auteur du wiki.postgresql.org/wiki/copy Si vous souhaitez voir les aspects négatifs de la copie et les problèmes avec cela. @Littlegreen: pl / pérlu , signifie que vous pouvez tirer dans des modules externes, il n'y a rien de spécial à ce sujet en soi, mais l'utilisation de texte :: csv_xs n'est pas script dans la db. J'utilise du texte :: CSV_XS pour transformer un CSV pour importer en PSQL en raison de l'absence de fonctionnalité de CSV natif dans la PSQL. J'utilise pl / pérlu par exemple pour créer des domaines pour les types de données par courrier électronique et les numéros de VIN.


Bien que je puisse comprendre votre frustration lorsque vous recevez des fichiers CSV d'une source, vous ne pouvez pas contacter / contrôler / peu importe, cinq des six questions ne sont pas pertinentes pour l'importation de CSV (NULL comme ...) ou sont incorrectivement dus au formaté. Fichiers CSV. La seule fois que la faute de la copie n'est pas de ne pas contraindre de fichiers de données formatés de lieu, mais je ne ferais que cela ne le faisait pas depuis que je dois échanger avec des fournisseurs de données européens et que je suis aux États-Unis (15.000 convertiraient silencieusement en 15 de mon côté Si vous n'aviez pas à la fois défini les deux locaux; mieux rejeter et intervenir manuellement).


Je ne sais pas comment vous avez réussi à compartimenter dans une telle mode. Tous ces problèmes sont en raison de mauvaises exportations, qui constitue une réelle vie de points de commun lors de la gestion des CSV. Tous ces problèmes sont gérables dans MSSQL et MySQL via leur interface de chargement CSV, mais elles ne sont pas faciles à gérer avec juste \ Copy. Je refuse de diviser le blâme. Beaucoup de problèmes de PG sont reconnaissants en amont et ils attendent simplement une personne avec un savoir-faire suffisant pour soumettre un correctif acceptable. PG n'a même pas eu la capacité de traiter les CSV avec des en-têtes (jetez la première rangée) jusqu'au 8.1.


Copier de est une bonne option, mais pas très flexible ... Si vous voulez faire un prétraitement, il est préférable d'utiliser un outil (ETL) loader.



3
votes

J'utilise Python / Jython pour se connecter à PostgreSQL et faire diverses choses.

PLUS:

  • Il y a PL / Python afin que vous puissiez utiliser python de PostgreSQL
  • Vous pouvez créer des programmes "autonomes" à l'aide de API Python DB , Il y a DOC sur la programmation de la base de données et PostgreSQL dans les détails
  • Vous pouvez utiliser Jython si vous aimez l'environnement JVM, en particulier le pilote JDBC

    Exemples d'utilisation:

    • Conversion de documents PDF, MS Word et OopenOffice sont enregistrés dans Blobs vers SMS pour l'indexer
    • importation de données provenant de diverses sources, pas seulement des CV; Python est vraiment fort pour convertir des données de texte
    • Test des pilotes tandis que certaines nos applications sont originaires et utilisent des pilotes ODBC ou JDBC et Jython peuvent travailler avec les deux pilotes (pour ODBC, il existe un pont JDBC-ODBC)

      sur mes autres messages sur vous permettre de voir que j'utilise Python / Jython avec d'autres bases de données comme Oracle et Informix. Par exemple, j'ai créé des outils qui déblose des informations du schéma de base de données afin que je puisse facilement comparer des bases de données dans l'environnement de test et de production.


1 commentaires

Merci. Je vais envisager d'utiliser Python ainsi que Perl.



1
votes

SCHEMACRAWLER pour PostgreSQL vous permet de script sur une base de données à l'aide de JavaScript.


1 commentaires

JavaScript, encore une autre possibilité :-) Cela devient intéressant. Je vais mettre du temps à enquêter sur toutes les options et à voir ce qui est le plus puissant.