sql >> Databasteknik >  >> RDS >> PostgreSQL

Finns det något sätt att ladda textdata till databasen i PostgreSQL?

En metod jag använder med mina stora XML-filer - 130 GB eller större - är att ladda upp hela filen till en tillfällig ologgad tabell och därifrån extraherar jag det innehåll jag vill ha. Unlogged tables är inte kraschsäkra, men är mycket snabbare än loggade, vilket helt passar syftet med en tillfällig tabell;-)

Med tanke på följande tabell ..

CREATE UNLOGGED TABLE tmp (raw TEXT);

.. du kan importera den här filen på 1 GB med en enda psql linje från din konsol (unix)..

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

Efter det är allt du behöver använda din logik för att fråga och extrahera den information du vill ha. Beroende på storleken på din tabell kan du skapa en andra tabell från en SELECT , t.ex.:

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%'

Justera string_to_array funktionen och WHERE klausul till din logik! Alternativt kan du ersätta dessa flera LIKE operationer till en enda SIMILAR TO .

.. och din data skulle vara redo att spelas med:

SELECT * FROM t;

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

När din data har extraherats kan du DROP TABLE tmp; för att frigöra lite diskutrymme;)

Ytterligare läsning:COPY , PostgreSQL array functions och pattern matching




  1. Topp 18 gratis och allmänt använda NoSQL-databaser med öppen källkod

  2. Logisk vy av datamodellen i R12.2

  3. Med hänvisning till sessionsvariabler (\set var='value') från PL/PGSQL

  4. Hur får man Insert id i MSSQL i PHP?