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
nebopg_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