sql >> Database teknologi >  >> RDS >> PostgreSQL

Er der en måde at indlæse tekstdata til databasen i PostgreSQL?

En tilgang, jeg bruger med mine store XML-filer - 130 GB eller større - er at uploade hele filen til en midlertidig ulogget tabel og derfra udtrækker jeg det indhold, jeg ønsker. Unlogged tables er ikke crash-sikre, men er meget hurtigere end loggede, hvilket helt passer til formålet med en midlertidig tabel;-)

I betragtning af følgende tabel ..

CREATE UNLOGGED TABLE tmp (raw TEXT);

.. du kan importere denne 1GB fil ved hjælp af en enkelt psql linje fra din konsol (unix)..

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

Derefter er alt hvad du behøver at anvende din logik til at forespørge og udtrække den information, du ønsker. Afhængigt af størrelsen på din tabel kan du oprette en anden tabel fra en SELECT , f.eks.:

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

Juster string_to_array funktionen og WHERE klausul til din logik! Du kan eventuelt erstatte disse flere LIKE operationer til en enkelt SIMILAR TO .

.. og dine data ville være klar til at blive spillet 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 dine data er udtrukket, kan du DROP TABLE tmp; for at frigøre noget diskplads;)

Yderligere læsning:COPY , PostgreSQL array functions og pattern matching




  1. JOIN-forespørgsler vs. flere forespørgsler

  2. Tabel-vurderede funktioner i ORACLE 11g ? (parametriserede visninger)

  3. mangler FROM-klausulindgang for tabel Grupo cakephp

  4. Sådan bruges IDENTITY()-funktionen i SQL Server