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?

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


@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.


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.


25

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

\i c:/1.sql

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.