sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのデータベースにテキストデータをロードする方法はありますか?

    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




    1. SQLWHERE複数の条件

    2. MariaDBでのWEEKOFYEAR()のしくみ

    3. SQL Serverでクエリ実行プランを取得するにはどうすればよいですか?

    4. MySQLで数値のみを返す