sql >> Database >  >> RDS >> PostgreSQL

In PostgreSQL, hoe gegevens in te voegen met de opdracht COPY?

COPY tbl FROM STDIN;

wordt niet ondersteund door pgAdmin.
Je krijgt een duidelijke syntaxisfout omdat Postgres de gegevens als SQL-code ophaalt.

Vier mogelijke oplossingen:

1. Gebruik een INSERT met meerdere rijen in plaats daarvan:

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

Let op de verschillende (SQL) syntaxis voor waarden als tekenreeksen of numerieke letterlijke waarden.

U kunt de gegevens genereren met pg_dump met behulp van --inserts . Gerelateerd:

  • Specifieke rijen uit een PostgreSQL-tabel exporteren als INSERT SQL-script

2. Of roep uw script op de opdrachtregel aan met psql . Als systeemgebruiker postgres :

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

Database (-d ) en inlogrol (-U voor "Gebruiker") kan worden weggelaten als de standaardinstellingen in orde zijn. Voorbeelden van syntaxis:

  • Maak Postgres-database met behulp van een batchbestand met [template],[encoding],[owner] en een .sql-bestand

Zorg ervoor dat er een einde-van-gegevensmarkering is (\. ) voor standaard text formaat. (Dat heb je.) De handleiding:

Het einde van de gegevens kan worden weergegeven door een enkele regel met een backslash-periode (\. ). Een einde-van-gegevensmarkering is niet nodig bij het lezen van een bestand, omdat het einde van het bestand perfect dienst doet; is alleen nodig bij het kopiëren van gegevens van of naar clienttoepassingen met behulp van het clientprotocol van vóór 3.0.

3. Of verplaats uw gegevens naar een apart bestand op de server , zeg 'beer_data.csv' en gebruik COPY .. FROM 'filename' in je script:

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

Wat hoe dan ook werkt. U hebt echter superuser-privileges nodig. De handleiding:

[...] COPY het benoemen van een bestand of opdracht is alleen toegestaan ​​voor database-superusers of gebruikers die een van de standaardrollen hebben gekregenpg_read_server_files , pg_write_server_files , ofpg_execute_server_program , omdat het elk bestand kan lezen of schrijven of een programma draait waartoe de server toegangsrechten heeft.

(pg_read_server_files , pg_write_server_files en pg_execute_server_program zijn nieuw in Postgres 11.)

4. Of lees een bestand lokaal voor de client met het psql-meta-commando \copy . Zie:

  • Hoe kan ik geselecteerde rijen bijwerken met waarden uit een CSV-bestand in Postgres?
  • Hoe \copy te gebruiken in postgresql met pgadmin4


  1. een limiet van het aantal SQL Server-verbindingen?

  2. Namen van tijdzones met identieke eigenschappen leveren een ander resultaat op wanneer toegepast op tijdstempel

  3. tabelrijen bijwerken in postgres met behulp van subquery

  4. PostgreSQL GROUP BY anders dan MySQL?