Comment importer des fichiers * .sql existants dans PostgreSQL 8.4?

105

J'utilise PostgreSQL 8.4 et j'ai des fichiers * .sql à importer dans une base de données. Comment puis-je le faire?

Badr
la source

Réponses:

142

Depuis la ligne de commande:

psql -f 1.sql
psql -f 2.sql

À partir de l' psqlinvite:

\i 1.sql
\i 2.sql

Notez que vous devrez peut-être importer les fichiers dans un ordre spécifique (par exemple: définition des données avant manipulation des données). Si vous avez un bashshell (GNU / Linux, Mac OS X, Cygwin) et que les fichiers peuvent être importés dans l'ordre alphabétique , vous pouvez utiliser cette commande:

for f in *.sql ; do psql -f $f ; done

Voici la documentation de l' psqlapplication (merci, Frank): http://www.postgresql.org/docs/current/static/app-psql.html

Bolo
la source
@moon Vous n'avez peut-être pas les droits d'accès aux fichiers SQL? Sur quel système d'exploitation êtes-vous?
Bolo
@moon C'est le mot de passe associé à votre utilisateur PostgreSQL (la paire passe-utilisateur est stockée dans PostgreSQL).
Bolo
8
@moon Je vous suggère de diviser votre problème en trois étapes: 1) assurez-vous que vous pouvez commencer à psqlcourir. 2) Assurez - vous que votre utilisateur dispose des droits d'écriture nécessaires, tels que: CREATE, INSERT, UPDATE, etc. 3) importer les fichiers SQL. Pour autant que je sache, vous en êtes maintenant à l'étape 1.
Bolo
@Bolo: Souhaitez-vous mettre les trois étapes dans la réponse?
AH
@Bolo, comme vous l'avez mentionné, je suis maintenant dans la troisième étape. mais comment je peux importer un fichier .sql à partir de ma machine locale. J'ai essayé \ i [chemin complet avec l'extension] mais je reçois le message d'erreur .sql aucun fichier ou répertoire. Pourriez-vous s'il vous plaît donner un exemple.
75

en ligne de commande, accédez d'abord au répertoire où psql est présent, puis écrivez des commandes comme celle-ci:

psql [database name] [username]

puis appuyez sur Entrée psql demande le mot de passe, donnez le mot de passe utilisateur:

puis écrire

> \i [full path and file name with extension]

puis appuyez sur Entrée insertion terminée.

Badr
la source
J'utilise ça aussi. Et il fonctionne. Mais, je change les instructions SQL fournies. Auparavant, le * .sql existant n'utilisait aucun caractère; comme terminaison d'une ligne. Et je dois aussi supprimer le GO. Pensez-vous que le script sql n'est pas un script psql?
swdev
J'ai essayé d'utiliser \ i [chemin complet avec l'extension] mais je reçois le message d'erreur .sql aucun fichier ou répertoire. Pourriez-vous s'il vous plaît télécharger un exemple. Merci.
Si \ i dit aucun fichier de ce type, il n'a pas trouvé de fichier à cette position. Il est préférable de donner l'URL absolue. Pour moi sur Windows, cette ligne de commande fonctionnait: \ i /tmp/robert/test.sql bien sûr, vous devez avoir des commandes SQL valides dans ce fichier.
shevy
36

Eh bien, le moyen le plus court que je connaisse, c'est de suivre:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

database_name: Dans quelle base de données devez-vous insérer vos données de fichier.

file_path: chemin absolu vers le fichier via lequel vous souhaitez effectuer l'importation.

host_name: Le nom de l'hôte. À des fins de développement, c'est principalement localhost.

En entrant cette commande dans la console, vous serez invité à entrer votre mot de passe.

Arslan Ali
la source
25

Faites attention avec "/" et "\". Même sous Windows, la commande doit être sous la forme:

\i c:/1.sql
sofiane
la source
1

Toujours préféré en utilisant un fichier de service de connexion (lookup / google 'fichier de service de connexion psql')

Puis simplement:

psql service={yourservicename} < {myfile.sql}

yourservicenameest un nom de section du fichier de service.

Ted Rybicki
la source