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

Hvordan indsætter man data i PostgreSQL med COPY-kommandoen?

COPY tbl FROM STDIN;

er ikke understøttet af pgAdmin.
Du får en almindelig syntaksfejl, fordi Postgres får dataene som SQL-kode.

Fire mulige løsninger:

1. Brug en INSERT med flere rækker i stedet:

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

Bemærk den forskellige (SQL) syntaks for værdier som streng eller numeriske bogstaver.

Du kan generere dataene med pg_dump ved hjælp af --inserts . Relateret:

  • Eksportér specifikke rækker fra en PostgreSQL-tabel som INSERT SQL-script

2. Eller kald dit script på kommandolinjen ved hjælp af psql . Som systembruger postgres :

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

Database (-d ) og login-rolle (-U for "Bruger") kan udelades, hvis standardindstillingerne er ok. Syntakseksempler:

  • Opret Postgres-database ved hjælp af batchfil med [skabelon],[kodning],[ejer] og en .sql-fil

Sørg for, at der er en slut-på-data-markør (\. ) for standard text format. (Det har du.) Manualen:

Slut på data kan repræsenteres af en enkelt linje indeholdende justbackslash-periode (\. ). En ende-på-data-markør er ikke nødvendig, når du læser fra en fil, da slutningen af ​​filen fungerer perfekt; det er kun nødvendigt, når der kopieres data til eller fra klientapplikationer ved hjælp af pre-3.0 klientprotokol.

3. Eller flyt dine data til en separat fil på serveren , sig 'beer_data.csv' og brug COPY .. FROM 'filename' i dit script:

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

Hvilket virker begge veje. Du har dog brug for superbrugerrettigheder. Manualen:

[...] COPY navngivning af en fil eller kommando er kun tilladt for databasesuperbrugere eller brugere, der er tildelt en af ​​standardrollernepg_read_server_files , pg_write_server_files , ellerpg_execute_server_program , da det tillader læsning eller skrivning af enhver fil eller kører et program, som serveren har privilegier til at få adgang til.

(pg_read_server_files , pg_write_server_files og pg_execute_server_program er nye i Postgres 11.)

4. Eller læs en fil lokalt for klienten med psql-metakommandoen \copy . Se:

  • Hvordan opdaterer du valgte rækker med værdier fra en CSV-fil i Postgres?
  • Sådan bruges \copy i postgresql med pgadmin4


  1. Datatype uoverensstemmelse (kode 20) under indsættelse

  2. Hvorfor rapporterer MySQL en syntaksfejl på FULL OUTER JOIN?

  3. UNION ALL vs OR-tilstand i sql-serverforespørgsel

  4. SQL Server SHOWPLAN_ALL