130GB以上の大きなXMLファイルで使用するアプローチは、ファイル全体を一時的なログに記録されていないにアップロードすることです。 テーブルとそこから必要なコンテンツを抽出します。 Unlogged tables
クラッシュセーフではありませんが、ログに記録されたものよりもはるかに高速であり、一時テーブルの目的に完全に適合します;-)
次の表を検討してください..
CREATE UNLOGGED TABLE tmp (raw TEXT);
..単一のpsql
を使用してこの1GBファイルをインポートできます コンソールからの行(unix)..
$ cat 1gb_file.txt | psql -d db -c "COPY tmp FROM STDIN"
その後、必要なのは、ロジックを適用して、必要な情報を照会および抽出することです。テーブルのサイズに応じて、SELECT
から2番目のテーブルを作成できます 例:
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
、PostgreSQLarray functions
およびpattern matching