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

Czy istnieje sposób na załadowanie danych tekstowych do bazy danych w PostgreSQL?

Podejście, którego używam w przypadku moich dużych plików XML — 130 GB lub większych — polega na przesłaniu całego pliku do tymczasowego niezalogowanego tabeli i stamtąd wyciągam zawartość, którą chcę. Unlogged tables nie są bezpieczne w przypadku awarii, ale są znacznie szybsze niż te, które są zalogowane, co całkowicie pasuje do celów tabeli tymczasowej;-)

Biorąc pod uwagę poniższą tabelę ..

CREATE UNLOGGED TABLE tmp (raw TEXT);

.. możesz zaimportować ten plik 1GB za pomocą jednego psql linia z konsoli (unix).

$ cat 1gb_file.txt | psql -d db -c "COPY tmp FROM STDIN" 

Następnie wystarczy zastosować swoją logikę do zapytania i wyodrębnienia żądanych informacji. W zależności od rozmiaru tabeli możesz utworzyć drugą tabelę z SELECT , np.:

CREATE TABLE t AS
SELECT 
  trim((string_to_array(raw,','))[1]) AS operation,
  trim((string_to_array(raw,','))[2])::timestamp AS tmst,
  trim((string_to_array(raw,','))[3]) AS txt
FROM tmp
WHERE raw LIKE '%DEBUG%' AND
      raw LIKE '%ghtorrent-40%' AND 
      raw LIKE '%Repo EFForg/https-everywhere exists%'

Dostosuj string_to_array funkcja i WHERE klauzula do Twojej logiki! Opcjonalnie możesz zastąpić te wiele LIKE operacje na pojedynczym SIMILAR TO .

.. a Twoje dane będą gotowe do odtwarzania:

SELECT * FROM t;

 operation |        tmst         |                               txt                                
-----------+---------------------+------------------------------------------------------------------
 DEBUG    | 2017-03-23 10:02:27 | ghtorrent-40 -- ghtorrent.rb:Repo EFForg/https-everywhere exists
(1 Zeile)

Po wyodrębnieniu danych możesz DROP TABLE tmp; zwolnić trochę miejsca na dysku;)

Dalsza lektura:COPY , PostgreSQL array functions i pattern matching




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupa użytkowników PostgreSQL NL

  2. Jak działa current_date w PostgreSQL

  3. Jak utworzyć użytkownika tylko do odczytu w PostgreSQL

  4. Hibernuj UUID z PostgreSQL i SQL Server

  5. Nie można użyć tabeli o nazwie użytkownik w hibernacji postgresql