1

問題

dfR データフレームの内容を schemaにある PostgreSQL テーブルにコピーしようとしていtable_nameますschema_name。デフォルトでは、PostgreSQL はテーブルをpublicスキーマに書き込みますが、この設定を変更したくありません。この転送の 2 つのユニークな側面は次のとおりです。

  1. デフォルト以外のスキーマでのテーブルへの書き込み。と
  2. データフレームdfに含まれるフィールドの数は よりも少なくなりますtable_name。ただし、 に含まれるすべてのフィールドは に存在します。dftable_name

私が試したこと

最初に回避策を使用dbWriteTableしてRPostgreSQLパッケージから使用しようとしました:

dbWriteTable(con, c("schema_name","table_name"), df, append = T)

次の例外が発生します。

Error in postgresqlgetResult(new.con) : 
  RS-DBI driver: (could not Retrieve the result : ERROR:  missing data for column "extra_col"
CONTEXT:  COPY df, line 1: " [removed contents] "

次にdbWriteTable2carolineパッケージ (前述のdbWriteTable関数のラッパー) から試してみましたが、上記の非デフォルト スキーマ ハックは機能していないようです。

dbWriteTable2(con, c("schema_name","table_name"), df, append = T, add.id = FALSE)

次の例外を作成します。

creating NAs/NULLs for for fields of table that are missing in your df 
Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : ERROR:  relation "schema_name" does not exist 
LINE 1: SELECT * FROM schema_name ORDER BY id DESC LIMIT 1
4

1 に答える 1