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

postgres 9.2でコピーを実行した後、値の前後に一重引用符が表示されます

    あなたがあなたの質問で説明することは明らかに実際に起こっていることではありません。 コピー 冗長な一重引用符を含む文字列リテラルをdateにインポートしようとすると失敗します 列。

    冗長な引用符を取り除くには、一時テーブル> text 列、次に INSERT INTO 引用符をトリミングするターゲットテーブル:

    CREATE TEMP TABLE wtmp (
       city text
     , temp_lo int
     , temp_hi int
     , prcp real
     , date text  -- note how I use text here.
    );
    
    COPY wtmp FROM '~aviad/postsgres/playground/weather.txt';
    
    INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
    SELECT city, temp_lo, temp_hi, prcp, trim(date, '''')::date
    FROM   wtmp
    -- ORDER BY ?
    ;
    

    一時テーブルは、セッションの終了時に自動的に削除されます。

    識別子として予約語

    マニュアルから例をコピーしたようです。これが現在のマニュアルへのディープリンク です。 。

    正しいですが、マニュアルのその例は残念です。 のような予約語は使用しないことをお勧めします日付 列名として。ご覧のとおり、こちら 日付 すべてのSQL標準で予約語です。 Postgresでの使用が許可されており、簡単な例でどのように魅力的であるかがわかります。しかし、それは良い考えにはなりません。一般的に、あなたは回避する習慣を身につける必要があります 識別子としての予約語。紛らわしいエラーメッセージや不必要に互換性のないSQLコードにつながります。



    1. MYSQL:連番表

    2. Heroku pg:psqlがストールする

    3. Yii2ファイルをOracleBLOBに保存

    4. MariaDB USER()の説明