Utilisation de COPY FROM STDIN dans les postgres

14

Je viens de commencer à utiliser Postgres et j'essaie de créer un exemple de base de données pour comprendre ses fonctions, en regardant autour, j'ai trouvé quelques scripts sur pgfoundry.org. Je comprends les commandes, car j'ai déjà utilisé à la fois Oracle et MS-SQL, mais tous les scripts que j'exécute retournent des erreurs lorsqu'ils atteignent l'instruction "COPY FROM". Plus précisément, l'erreur est lancée sur le premier élément qui doit être inséré dans le tableau donné.

J'ai essayé d'exécuter les scripts en tant que requêtes et en tant que pgScripts, mais dans les deux sens, j'obtiens une erreur à la première ligne après la COPIE DE.

J'utilise pgAdminIII et j'ai utilisé StackBuilder pour installer PostgreSQL 9.2.4.1 en tant que pilote DB. Puis-je manquer une configuration de base qui m'empêche d'exécuter cette commande, ou je ne comprenais tout simplement pas leur fonctionnement?

EDIT:
L'erreur est:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

où le texte est:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Eugenio Laghi
la source
1
Bienvenue sur dba.SE. Vous devez inclure le message d'erreur (textuellement) avec une question comme celle-ci. Si vos paramètres régionaux ne sont pas en anglais, vous pouvez le réinitialiser dans votre session avant d'exécuter le script pour obtenir des messages d'erreur en anglais par défaut: SET lc_messages = Cexécutez-le simplement dans la fenêtre de votre éditeur SQL, qui "contient" une session.
Erwin Brandstetter
Merci, j'essaie de comprendre comment changer mes paramètres régionaux, j'inclurai le message d'erreur dès que je saurai comment le faire.
Eugenio Laghi
1
Oh, j'ai oublié des guillemets simples: SET lc_messages = 'C'.
Erwin Brandstetter

Réponses:

10

pgScript est une extension de script locale de pgAdmin, que vous ne voulez probablement pas ici.

pgAdmin est une interface graphique, pas une application console - il n'y en a pas que stdinvous puissiez facilement utiliser. Si vous devez stdindiffuser votre contenu, utilisez psql, qui est une application console - avec la \copyméta-commande de psql .

Si vous avez un fichier (ce que vous avez évidemment), utilisez simplement SQL COPYde pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

Le fichier doit être lisible par l' postgresutilisateur du système.

Plus d'informations dans cette demande étroitement liée à la liste de support pgAdmin .

Erwin Brandstetter
la source
ok, tu veux dire que je devrais exécuter le script avec une ligne comme psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql:? De plus, je suis en train d'essayer tout localement, je viens d'installer pgAdmin sur mon portable.
Eugenio Laghi
1
@EugenioLaghi: Pas exactement. psql -fexécuterait un fichier de script SQL. Vous semblez avoir affaire à un fichier de données . J'ai mis à jour ma réponse.
Erwin Brandstetter
MERCI! Au début, j'essayais d'exécuter un script, mais maintenant au moins j'ai compris comment COPIER des données à partir d'un fichier! Hier soir, j'étais trop fatigué pour comprendre .. :)
Eugenio Laghi
Comment vous assurez-vous que l'utilisateur postgres peut lire le fichier. J'ai rendu cela possible pour le fichier txt, même pour mon bureau (où se trouve le fichier), mais l'autorisation est toujours refusée.
@Geo: Veuillez commencer une nouvelle question, y compris la version Postgres, OS, où se trouve le fichier, la commande verbatim que vous avez utilisée et plus si nécessaire ...
Erwin Brandstetter