問題
df
R データフレームの内容を schemaにある PostgreSQL テーブルにコピーしようとしていtable_name
ますschema_name
。デフォルトでは、PostgreSQL はテーブルをpublic
スキーマに書き込みますが、この設定を変更したくありません。この転送の 2 つのユニークな側面は次のとおりです。
- デフォルト以外のスキーマでのテーブルへの書き込み。と
- データフレーム
df
に含まれるフィールドの数は よりも少なくなりますtable_name
。ただし、 に含まれるすべてのフィールドは に存在します。df
table_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] "
次にdbWriteTable2
、caroline
パッケージ (前述の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