sql >> Databáze >  >> RDS >> PostgreSQL

Jak v PostgreSQL vložit data pomocí příkazu COPY?

COPY tbl FROM STDIN;

není podporováno pgAdmin.
Objeví se obyčejná syntaktická chyba, protože Postgres získává data jako kód SQL.

Čtyři možná řešení:

1. Použijte víceřádkový INSERT místo toho:

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

Všimněte si odlišné (SQL) syntaxe pro hodnoty jako řetězcové nebo číselné literály.

Data můžete vygenerovat pomocí pg_dump pomocí --inserts . Související:

  • Exportujte konkrétní řádky z tabulky PostgreSQL jako skript INSERT SQL

2. Nebo zavolejte skript z příkazového řádku pomocí psql . Jako uživatel systému postgres :

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

Databáze (-d ) a přihlašovací role (-U pro "Uživatel") lze vynechat, pokud jsou výchozí hodnoty v pořádku. Příklady syntaxe:

  • Vytvořte databázi Postgres pomocí dávkového souboru s [šablona],[kódování],[vlastník] a soubor .sql

Ujistěte se, že existuje značka konce dat (\. ) pro výchozí text formát. (To máte.) Manuál:

Konec dat může být reprezentován jedním řádkem obsahujícím justbackslash-period (\. ). Značka konce dat není při čtení ze souboru nutná, protože konec souboru slouží naprosto dobře; je potřeba pouze při kopírování dat do nebo z klientských aplikací používajících klientský protokol starší než 3.0.

3. Nebo přesuňte data do samostatného souboru na serveru , řekněte 'beer_data.csv' a použijte COPY .. FROM 'filename' ve vašem skriptu:

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

Což funguje tak či tak. Potřebujete však oprávnění superuživatele. Manuál:

[...] COPY pojmenování souboru nebo příkazu je povoleno pouze superuživatelům databáze nebo uživatelům, kteří mají přidělenu jednu z výchozích rolípg_read_server_files , pg_write_server_files nebo pg_execute_server_program , protože umožňuje čtení nebo zápis jakéhokoli souboru nebo spuštění programu, ke kterému má server oprávnění přistupovat.

(pg_read_server_files , pg_write_server_files a pg_execute_server_program jsou nové v Postgres 11.)

4. Nebo si přečtěte soubor místního klienta pomocí metapříkazu psql \copy . Viz:

  • Jak aktualizovat vybrané řádky hodnotami ze souboru CSV v Postgresu?
  • Jak používat \copy v postgresql s pgadmin4


  1. Looping Over Result Sets v MySQL

  2. Je možné vypnout zpracování nabídek v příkazu Postgres COPY s formátem CSV?

  3. Použití CONTINUE v smyčkách k obnovení řízení v Oracle

  4. Vytváření dočasných tabulek v SQL