sql >> Database >  >> RDS >> PostgreSQL

Is er een manier om tekstgegevens naar de database in PostgreSQL te laden?

Een benadering die ik gebruik met mijn grote XML-bestanden - 130 GB of groter - is om het hele bestand te uploaden naar een tijdelijke unlogged tabel en van daaruit extraheer ik de inhoud die ik wil. Unlogged tables zijn niet crashveilig, maar zijn veel sneller dan ingelogde, wat helemaal past bij het doel van een tijdelijke tafel;-)

Gezien de volgende tabel ..

CREATE UNLOGGED TABLE tmp (raw TEXT);

.. u kunt dit bestand van 1 GB importeren met een enkele psql lijn van je console (unix)..

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

Daarna hoeft u alleen maar uw logica toe te passen om de gewenste informatie op te vragen en te extraheren. Afhankelijk van de grootte van je tafel, kun je een tweede tafel maken van een SELECT , bijv.:

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

Pas de string_to_array aan functie en de WHERE clausule aan uw logica! Optioneel kun je deze meerdere LIKE . vervangen bewerkingen met een enkele SIMILAR TO .

.. en je gegevens zijn klaar om mee te spelen:

SELECT * FROM t;

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

Zodra uw gegevens zijn geëxtraheerd, kunt u DROP TABLE tmp; om wat schijfruimte vrij te maken;)

Verder lezen:COPY , PostgreSQL array functions en pattern matching




  1. Is het voorvoegsel sp_ nog steeds een nee-nee?

  2. Voordelen van het leren van nieuwe DB-systemen

  3. PostgreSQL, slepen en wisselen

  4. Hoe het creditcardnummer te valideren en het type te identificeren met behulp van PL/SQL?