sql >> Databasteknik >  >> RDS >> PostgreSQL

I PostgreSQL, hur infogar man data med kommandot COPY?

COPY tbl FROM STDIN;

stöds inte av pgAdmin.
Du får ett vanligt syntaxfel eftersom Postgres får data som SQL-kod.

Fyra möjliga lösningar:

1. Använd en INSERT med flera rader istället:

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')
;

Notera den olika (SQL) syntaxen för värden som sträng eller numeriska bokstaver.

Du kan generera data med pg_dump med --inserts . Relaterat:

  • Exportera specifika rader från en PostgreSQL-tabell som INSERT SQL-skript

2. Eller ring ditt skript på kommandoraden med psql . Som systemanvändare postgres :

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

Databas (-d ) och inloggningsroll (-U för "Användare") kan utelämnas om standardinställningarna är ok. Syntaxexempel:

  • Skapa Postgres-databas med batchfil med [mall],[kodning],[ägare] och en .sql-fil

Se till att det finns en markör för slutdata (\. ) för standard text formatera. (Du har det.) Manualen:

Slutet på data kan representeras av en enda rad som innehåller justbackslash-period (\. ). En dataslutmarkör är inte nödvändig när man läser från en fil, eftersom slutet av filen fungerar utmärkt; Det behövs bara när du kopierar data till eller från klientapplikationer med klientprotokollet pre-3.0.

3. Eller flytta dina data till en separat fil på servern , säg 'beer_data.csv' och använd COPY .. FROM 'filename' i ditt manus:

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

Vilket fungerar åt båda hållen. Du behöver dock superanvändarprivilegier. Manualen:

[...] COPY att namnge en fil eller ett kommando är endast tillåtet för databassuperanvändare eller användare som har tilldelats en av standardrollernapg_read_server_files , pg_write_server_files , ellerpg_execute_server_program , eftersom det tillåter läsning eller skrivning av alla filer eller kör ett program som servern har behörighet att komma åt.

(pg_read_server_files , pg_write_server_files och pg_execute_server_program är nya i Postgres 11.)

4. Eller läs en fil lokalt för klienten med psql-metakommandot \copy . Se:

  • Hur uppdaterar man valda rader med värden från en CSV-fil i Postgres?
  • Hur man använder \copy i postgresql med pgadmin4


  1. Skärning av flera arrayer i PostgreSQL

  2. Strängsammansättning i MySQL

  3. Använd MySQL relationsdatabaser på Ubuntu 10.10 (Maverick)

  4. Ingen dialektmappning för JDBC-typ:2003