sql >> Databáze >  >> RDS >> PostgreSQL

Existuje způsob, jak načíst textová data do databáze v PostgreSQL?

Přístup, který používám u svých velkých souborů XML – 130 GB nebo větší – je nahrát celý soubor do dočasného nepřihlášeného tabulky a odtud extrahuji obsah, který chci. Unlogged tables nejsou bezpečné při pádu, ale jsou mnohem rychlejší než protokolované, což zcela vyhovuje účelu dočasné tabulky;-)

S ohledem na následující tabulku ..

CREATE UNLOGGED TABLE tmp (raw TEXT);

.. tento 1GB soubor můžete importovat pomocí jediného psql linka z vaší konzole (unix)..

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

Poté vše, co potřebujete, je použít vaši logiku k dotazování a extrahování požadovaných informací. V závislosti na velikosti vaší tabulky můžete vytvořit druhou tabulku z SELECT , např.:

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

Upravte string_to_array funkce a WHERE klauzule vaší logiky! Volitelně můžete nahradit tyto vícenásobné LIKE operace na jeden SIMILAR TO .

.. a vaše data budou připravena k přehrávání:

SELECT * FROM t;

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

Jakmile jsou vaše data extrahována, můžete DROP TABLE tmp; pro uvolnění místa na disku;)

Další čtení:COPY , PostgreSQL array functions a pattern matching




  1. Proveďte analýzu produktu pomocí SQL Server Full-Text Search. Část 1

  2. Jak CONVERT() funguje v MariaDB

  3. Jak smazat data z Elastisearch

  4. Nedostatky mysql_real_escape_string?