PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

In PostgreSQL, come inserire i dati con il comando COPY?

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