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

POSTGRESは、プログラムから不明な列を持つ動的テーブルにコピーします

    事前に行の数/タイプがわからないので、次のようにすることをお勧めします:

    • (1)CSVを分割せずに単一のテキスト列を持つ(一時的な?)テーブルにインポートします。 backspaceを使用する インポートされた行全体がそのまま残るように、区切り文字としての文字。
    CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
    COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
    
    • (2)CSVをテキスト配列に分割する クエリを実行します。 -関数parse_csv 、次に、結果のテキスト配列のセットを関連するものとして使用します(「実際の」ターゲットテーブルにマップ/挿入する場合があります)
    WITH rawdata AS
    (
     SELECT parse_csv(rawtext) arr FROM rawtext_t
    ) 
    INSERT INTO real_t (...fields...) 
    SELECT arr[1], arr[3], ...
    FROM rawdata;
    
    TRUNCATE TABLE rawtext_t;
    

    WHEREを追加できます 2番目のSELECTの句 必要に応じて着信行をフィルタリングするためのステートメント。

    別のオプション -私の理解では非常に良いものです-優れたfile_textarray_fdw を使用することです 多かれ少なかれ同じ効果に。

    これがあなたにアイデアと助けを与えることを願っています。




    1. 日付と現在の時刻の時差?

    2. PostgreSQL DigitalOceanのパフォーマンスと価格の比較–ScaleGridとDigitalOceanマネージドデータベース

    3. 関数を使用して2つの日付の間の日付のリストを取得します

    4. ピボットテーブルPHP/MySQL