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

Script shell pour exécuter des commandes pgsql dans des fichiers

Tout d'abord, ne faites pas mélanger psql méta-commandes et SQL commandes. Ce sont des ensembles de commandes distincts. Il existe des astuces pour les combiner (en utilisant les méta-commandes psql \o et \\ et les chaînes de tuyauterie vers psql dans le shell), mais cela devient rapidement déroutant.

  • Faites en sorte que vos fichiers contiennent uniquement des commandes SQL.
  • N'incluez pas le CREATE DATABASE déclaration dans les fichiers SQL. Créez la base de données séparément, vous en avez plusieurs fichiers que vous souhaitez exécuter dans le même modèle de base de données.

En supposant vous opérez en tant qu'utilisateur du système d'exploitation postgres et utilisez le rôle DB postgres en tant que superutilisateur Postgres (par défaut), toutes les bases de données sont dans le même cluster de bases de données sur le port par défaut 5432 et le rôle postgres a un accès sans mot de passe grâce à un IDENT réglage dans pg_hba.conf - une configuration par défaut.

psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
                  TEMPLATE template0"

J'ai basé la nouvelle base de données de modèles sur la base de données de modèles système par défaut template0 . Les bases dans le manuel ici.

Vos questions

Comment (...) exécuter un ensemble de cmds pgsql à partir d'un fichier

Essayez :

psql mytemplate1 -f file

Exemple de fichier de script pour un lot de fichiers dans un répertoire :

#! /bin/sh

for file in /path/to/files/*; do
    psql mytemplate1 -f "$file"
done

L'option de commande -f rend psql exécuter des commandes SQL dans un fichier.

Comment créer une base de données basée sur un modèle existant en ligne de commande

psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'

L'option de commande -c rend psql exécuter une seule chaîne de commande SQL. Peut être plusieurs commandes, terminées par ; - sera exécuté en un transaction et seul le résultat de la dernière commande est renvoyé.
Lisez les options de la commande psql dans le manuel.

Si vous ne fournissez pas de base de données à laquelle vous connecter, psql se connectera à la base de données de maintenance par défaut nommée "postgres". Dans la deuxième réponse, peu importe la base de données à laquelle nous nous connectons.