मैं अपनी बड़ी XML फ़ाइलों - 130GB या उससे बड़ी - के साथ एक दृष्टिकोण का उपयोग करता हूं - पूरी फ़ाइल को एक अस्थायी अनलॉग में अपलोड करना है तालिका और वहां से मैं अपनी इच्छित सामग्री निकालता हूं। Unlogged tables
क्रैश-सुरक्षित नहीं हैं, लेकिन लॉग किए गए लोगों की तुलना में बहुत तेज़ हैं, जो पूरी तरह से अस्थायी तालिका के उद्देश्य के अनुरूप हैं;-)
निम्न तालिका को ध्यान में रखते हुए ..
CREATE UNLOGGED TABLE tmp (raw TEXT);
.. आप इस 1GB फ़ाइल को एक psql
. का उपयोग करके आयात कर सकते हैं आपके कंसोल (यूनिक्स) से लाइन..
$ cat 1gb_file.txt | psql -d db -c "COPY tmp FROM STDIN"
उसके बाद आपको केवल अपने तर्क को क्वेरी करने और अपनी इच्छित जानकारी निकालने की आवश्यकता है। अपनी तालिका के आकार के आधार पर, आप SELECT
. से दूसरी तालिका बना सकते हैं , उदा.:
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%'
string_to_array
समायोजित करें फ़ंक्शन और WHERE
अपने तर्क के लिए खंड! वैकल्पिक रूप से आप इन एकाधिक LIKE
. को बदल सकते हैं एक SIMILAR TO
. के संचालन के लिए ।
.. और आपका डेटा इसके साथ खेलने के लिए तैयार होगा:
SELECT * FROM t;
operation | tmst | txt
-----------+---------------------+------------------------------------------------------------------
DEBUG | 2017-03-23 10:02:27 | ghtorrent-40 -- ghtorrent.rb:Repo EFForg/https-everywhere exists
(1 Zeile)
एक बार आपका डेटा एक्सट्रेक्ट हो जाने के बाद आप DROP TABLE tmp;
. कर सकते हैं कुछ डिस्क स्थान खाली करने के लिए;)
आगे पढ़ने:COPY
, PostgreSQL array functions
और pattern matching