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

Dans PostgreSQL, comment insérer des données avec la commande COPY ?

COPY tbl FROM STDIN;

n'est pas pris en charge par pgAdmin.
Vous obtenez une simple erreur de syntaxe car Postgres récupère les données sous forme de code SQL.

Quatre solutions possibles :

1. Utiliser un INSERT multi-lignes à la place :

INSERT INTO beer(name, tags, alcohol, brewery, id, brewery_id, image)
VALUES 
  ('Bons Voeux', 'blonde', 9.5, 'Brasserie Dupont', 250, 130, 'generic.png')
, ('Boerke Blond', 'blonde', 6.8, 'Brouwerij Angerik', 233, 287 'generic.png')
;

Notez la syntaxe (SQL) différente pour les valeurs sous forme de chaînes ou de littéraux numériques.

Vous pouvez générer les données avec pg_dump en utilisant --inserts . Connexe :

  • Exporter des lignes spécifiques d'une table PostgreSQL en tant que script INSERT SQL

2. Ou appelez votre script sur la ligne de commande en utilisant psql . En tant qu'utilisateur système postgres :

psql -f beer.sql -U my_login_role -d db_name 

Base de données (-d ) et le rôle de connexion (-U pour "Utilisateur") peut être omis si les valeurs par défaut sont correctes. Exemples de syntaxe :

  • Créer une base de données Postgres à l'aide d'un fichier batch avec [template],[encoding],[owner] et un fichier .sql

Assurez-vous qu'il y a un marqueur de fin de données (\. ) pour le text par défaut format. (Vous l'avez.) Le manuel :

La fin des données peut être représentée par une seule ligne contenant juste une barre oblique inverse (\. ). Un marqueur de fin de données n'est pas nécessaire lors de la lecture d'un fichier, puisque la fin de fichier sert parfaitement; il n'est nécessaire que lors de la copie de données vers ou depuis des applications clientes à l'aide d'un protocole client antérieur à la version 3.0.

3. Ou déplacez vos données vers un fichier séparé sur le serveur , dites 'beer_data.csv' et utilisez COPY .. FROM 'filename' dans votre script :

COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';

Ce qui fonctionne dans les deux sens. Cependant, vous avez besoin des privilèges de superutilisateur. Le manuel :

[...] COPY nommer un fichier ou une commande n'est autorisé qu'aux superutilisateurs de la base de données ou aux utilisateurs qui se voient attribuer l'un des rôles par défautpg_read_server_files , pg_write_server_files , oupg_execute_server_program , car il permet de lire ou d'écrire n'importe quel fichier ou d'exécuter un programme auquel le serveur a des privilèges d'accès.

(pg_read_server_files , pg_write_server_files et pg_execute_server_program sont nouveaux dans Postgres 11.)

4. Ou lire un fichier local au client avec la méta-commande psql \copy . Voir :

  • Comment mettre à jour les lignes sélectionnées avec les valeurs d'un fichier CSV dans Postgres ?
  • Comment utiliser \copy dans postgresql avec pgadmin4