PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SKOPIOWAĆ tylko niektóre kolumny z wejściowego pliku CSV?

Nie wiem, skąd masz tę składnię, ale COPY nie przyjmuje takiej listy aliasów kolumn. Zobacz pomoc:

COPY table_name [ ( column_name [, ...] ) ]
    FROM { 'filename' | PROGRAM 'command' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]

(AS nie jest jedną z wymienionych opcji; aby zobaczyć pełne dane wyjściowe uruchom \d copy w psql lub zajrzyj do instrukcji copy polecenie online).

W COPY nie ma funkcji mapowania który pozwala czytać tylko niektóre kolumny wejściowego pliku CSV. Byłoby to naprawdę przydatne, ale nikt nie miał jeszcze czasu/zainteresowania/finansowania na jego wdrożenie. To naprawdę tylko jedno z wielu zadań związanych z przekształcaniem/filtrowaniem danych, których ludzie i tak chcą.

PostgreSQL oczekuje listy kolumn podanej w COPY być w tej samej kolejności, od lewej do prawej, co w pliku CSV i mieć taką samą liczbę wpisów, jak w pliku CSV. Więc jeśli napiszesz:

COPY con (date,kgs)

wtedy PostgreSQL będzie oczekiwał wejściowego pliku CSV z dokładnie dwiema kolumnami . Użyje pierwszej kolumny csv dla "date" kolumna tabeli i druga kolumna csv dla "kgs" kolumna tabeli. Nie obchodzi go, jakie są nagłówki CSV, są one ignorowane, jeśli określisz WITH (FORMAT CSV, HEADER ON) lub traktowane jak zwykłe wiersze danych, jeśli nie określisz HEADER .

PostgreSQL 9.4 dodaje FROM PROGRAM do COPY , więc możesz uruchomić polecenie powłoki, aby odczytać plik i przefiltrować go. Wystarczy prosty skrypt Pythona lub Perla.

Jeśli jest to mały plik, po prostu otwórz kopię w wybranym arkuszu kalkulacyjnym jako plik csv, usuń niechciane kolumny i zapisz go, aby tylko date i kgs kolumny pozostają.

Alternatywnie COPY do tabeli pomostowej, która ma wszystkie te same kolumny co CSV , a następnie wykonaj INSERT INTO ... SELECT przenieść tylko pożądane dane do rzeczywistej tabeli docelowej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres nie rozpoznaje tabeli temp w funkcji

  2. Nieskończona pętla w funkcji wyzwalania

  3. Czy mogę użyć polecenia \copy do funkcji postgresql?

  4. Eksportuj do CSV i kompresuj za pomocą GZIP w postgresie

  5. Metapolecenia w Psycopg2 - \d nie działa