1

Rails アプリケーションがあり、PostgreSQL の COPY コマンドを使用してデータをロードしようとしています。ファイルはCSVです。テーブルは Rails モデルにマップされ、主キー ID 列を保持する必要があるため、model.for_each を使用してデータを操作できます。テーブルには 5M 以上の行があります。

私の質問は、データをテーブルにロードし、ID 列が存在できるように CSV を構成するにはどうすればよいですか? 私がそれを必要とする唯一の理由は for_each メソッドのためなので、残念です。

とにかく、次のように NULL を送信してみました。

NULL,col1,col2,col3,col4, etc.

しかし、うまくいきません。

ありがとう。

4

2 に答える 2

3

主キーに null を渡すことは、null 文字列に設定したオプションに関係なく機能しません。主キーを null に設定するようにバックエンドに指示することになります。これは、挿入するコマンドが何であれ、決して許可されません。

主キーを保持するという意味がまったくわかりません。それは何をしても保持されるものです。DB に値を選択させ、主キーがシリアル (自動インクリメント) の場合は、主キー以外のすべての列に明示的に名前を付けます。

COPY country (colA, colB, colC) FROM '/usr1/proj/bray/sql/country_data'; -- leave out pkey

また、可能な値を推測する代わりに、どの null 文字列オプションを使用したいかについてのドキュメントを読む方が早いかもしれません:

http://www.postgresql.org/docs/9.0/static/sql-copy.html

于 2011-03-14T21:39:10.863 に答える
1

WITH CSV を使用する場合のデフォルトは、次のような引用符のない空の文字列です。

,col1,col2,col3,,col5

次のようなレコードが作成されます。

NULL,'col1','col2','col3',NULL,'col5'
于 2011-03-14T21:09:27.947 に答える