0

奇妙な行動を発見。R を使用して既存の postgresql テーブルに多数の行を追加しようとしています。新しい行はテーブルに追加されます。

dbWriteTable(con,name = "public.MyTab",value = data,row.names=F,overwrite=F, append=T)  

エラーは返さTRUEれず、コピーが機能したと思います。ただし、開いたターミナル ( psql) で次のコマンドを実行すると:

SELECT count(*) from MyTab;

戻り値:

 count 
-------
     0

その後、R に戻ってテストするとき

dbReadTable(con, "public.MyTab")

データを正しく表示します。

どうしたの?データは Postgres データベースに正しく保存されていますか? 行を手動で挿入した場合 ( INSERT INTO ...)、即時カウント テストは意図したとおりに機能します。

4

2 に答える 2

2

同様の問題がありました-問題は、postgresがテーブル名と列名の大文字を処理しないが、を使用して大文字でテーブルを作成できることですDBI::dbWriteTable(). 実際には、実稼働データベースの 1 つ\dtに psql で表示されるテーブルがありますが、CLI から drop table ステートメントを使用して削除することはできません (R で削除する必要があるかもしれません)。ここに、これに関する簡単な議論があるスレッドがあります。

解決策:キャメルケースの代わりに小文字とアンダースコアを使用することに固執すれば、問題ありません。

于 2015-10-29T21:29:34.513 に答える
0

試してみてくださいname=c("public", "MyTab")。また、テーブル名の大文字と小文字にも注意してください (必要に応じて引用してください)。以下のコード:

df <- data.frame(name=c("Alice", "Bob"), score=c(95L, 90L))

library(RPostgreSQL)

con <- dbConnect(PostgreSQL())

# Write table using c(schema, table)
dbWriteTable(con, name = c("public", "MyTab"), value = df,
             row.names=FALSE, overwrite=TRUE)

# Works
dbGetQuery(con, "SELECT * FROM \"MyTab\"")

# Doesn't work
dbGetQuery(con, "SELECT * FROM MyTab")
dbDisconnect(con)
于 2014-12-29T14:56:00.887 に答える