Próbuję wyeksportować tabelę PostgreSQL z nagłówkami do pliku CSV za pomocą wiersza polecenia, jednak otrzymuję go do eksportu do pliku CSV, ale bez nagłówków.
Mój kod wygląda następująco:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
postgresql
csv
export-to-csv
heading
postgresql-copy
Elitmiar
źródło
źródło
Odpowiedzi:
zgodnie z opisem w instrukcji .
źródło
COPY
wymaga uprawnień administratora. Użyj\COPY
zamiast tego, jeśli napotkasz problemy.COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Z wiersza polecenia psql:
na końcu brak średnika.
źródło
COPY
polecenie wymaga dostępu administratorapsql
podejściu można zapisać dane wyjściowe w dowolnym miejscu, do którego ma dostęp. Właśnie wykorzystałem topsql
podejście do przeniesienia danych ze zdalnego serwera do pliku lokalnego. Bardzo zręczny.pg_dump -h remote | pg_restore -h localhost
.psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
zamiast samej nazwy tabeli można również napisać zapytanie dotyczące uzyskania tylko wybranych danych kolumny.
z uprawnieniami administratora
źródło
\COPY ...
). I przynajmniej w mojej wersji psql (9.5.2) nie musiałem podawać „DELIMITER”; domyślnie był to przecinek.Kiedy nie mam uprawnień do zapisania pliku z Postgres, stwierdzam, że mogę uruchomić zapytanie z wiersza poleceń.
źródło
To działa
źródło
-F ,
i używam|
jako separatora. Dzięki!COPY
oświadczenie, które tworzy plik do ponownego użyciaW przypadku wersji 9.5, której używam, byłoby to tak:
źródło
To rozwiązanie działało dla mnie przy użyciu
\copy
.źródło
Najprostszym sposobem (za pomocą
psql
) wydaje się być użycie--csv
flagi:źródło
Oto, w jaki sposób mam działającą powłokę mocy za pomocą pgsl Connnect do bazy danych Heroku PG:
Musiałem najpierw zmienić kodowanie klienta na utf8 w następujący sposób:
\encoding UTF8
Następnie zrzucił dane do pliku CSV w następujący sposób:
Użyłem ~ jako separatora, ponieważ nie lubię plików CSV, zwykle używam plików TSV, ale nie pozwala mi dodać „\ t” jako separatora, więc użyłem ~, ponieważ jest to rzadko używany znak.
źródło
skopiuj (anysql query datawanttoexport) do 'fileablsoutepathwihname' delimiter ',' nagłówek csv;
Za pomocą tego możesz również eksportować dane.
źródło
Publikuję tę odpowiedź, ponieważ żadna z podanych tutaj odpowiedzi tak naprawdę nie działała dla mnie. Nie mogłem użyć
COPY
z Postgres, ponieważ nie miałem odpowiednich uprawnień. Wybrałem więc „Eksportuj wiersze siatki” i zapisałem wynik jako UTF-8.psql
Wersja podana przez @Brian również nie działa na mnie, z innego powodu. Powodem, dla którego nie zadziałało, jest to, że najwyraźniej wiersz polecenia systemu Windows (korzystałem z systemu Windows) sam wtrącał się w kodowanie. Wciąż pojawiał się ten błąd:Rozwiązaniem, którego użyłem, było napisanie krótkiego skryptu JDBC (Java), który odczytuje plik CSV i wydaje instrukcje insert bezpośrednio do mojej tabeli Postgres. To działało, ale wiersz polecenia również działałby, gdyby nie zmieniał kodowania.
źródło
Spróbuj tego: „KOPIUJ produkty_273 Z '\ tmp \ products_199.csv„ DELIMITER ”,„ CSV HEADER ”
źródło