COPY tbl FROM STDIN;
non è supportato da pgAdmin.
Ottieni un semplice errore di sintassi perché Postgres ottiene i dati come codice SQL.
Quattro possibili soluzioni:
1. Usa un INSERT
a più righe invece:
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')
;
Nota la diversa sintassi (SQL) per i valori come stringhe o letterali numerici.
Puoi generare i dati con pg_dump
usando --inserts
. Correlati:
- Esporta righe specifiche da una tabella PostgreSQL come script INSERT SQL
2. Oppure chiama il tuo script dalla riga di comando usando psql
. Come utente di sistema postgres
:
psql -f beer.sql -U my_login_role -d db_name
Database (-d
) e il ruolo di accesso (-U
per "Utente") può essere omesso se le impostazioni predefinite sono ok. Esempi di sintassi:
- Crea un database Postgres utilizzando un file batch con [template],[encoding],[owner] e un file .sql
Assicurati che sia presente un indicatore di fine dati (\.
) per il text
predefinito formato. (Lo hai.) Il manuale:
La fine dei dati può essere rappresentata da una singola riga contenente justbackslash-period (\.
). Un marcatore di fine dati non è necessario durante la lettura da un file, poiché la fine del file serve perfettamente; È necessario solo quando si copiano dati da o verso applicazioni client utilizzando il protocollo client precedente alla 3.0.
3. Oppure sposta i tuoi dati in un file separato sul server , pronuncia 'beer_data.csv' e usa COPY .. FROM 'filename'
nel tuo script:
COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';
Che funziona in entrambi i casi. Hai bisogno dei privilegi di superutente, però. Il manuale:
[...] COPY
la denominazione di un file o di un comando è consentita solo ai superuser del database o agli utenti a cui è concesso uno dei ruoli predefinitipg_read_server_files
, pg_write_server_files
o pg_execute_server_program
, poiché consente di leggere o scrivere qualsiasi file o eseguire un programma a cui il server ha i privilegi di accesso.
(pg_read_server_files
, pg_write_server_files
e pg_execute_server_program
sono nuovi in Postgres 11.)
4. Oppure leggi un file locale sul client con il meta-comando psql \copy
. Vedi:
- Come aggiornare le righe selezionate con i valori di un file CSV in Postgres?
- Come usare \copy in postgresql con pgadmin4