27

RPostgreSQLを使用してデータの読み取りと書き込みを行っています。任意のスキーマからの読み取りは完全に機能しますが、非パブリック スキーマに書き込むことはできません。たとえば、次のコードは、publicスキーマに次の名前のテーブルを配置します。myschema.tablex

# write dataframe to postgres 
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host="localhost", user="postgres", password="zzzz", dbname="mydatabase", port="5436")
if(dbExistsTable(con,"myschema.tablex")) {
  dbRemoveTable(con,"myschema.vkt_tablex")}
dbWriteTable(con,"myschema.tablex", dataframe, row.names=F)

私がやりたいことは、テーブルtablexを schemaに配置することmyschemaです。また、接続でスキーマに名前を付けようとしました:以前のバグで参照されてdbname="mydatabase.myschema"いる引数を試してみました。schemaname

これらのアプローチはどれも機能しないため、使用できる別の方法があるかどうか疑問に思っています。

4

3 に答える 3

54

これを使って:

library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = "db", host = "host", port = 5432,
                 user = "user", password = "pwd")
dbWriteTable(con, c("yourschema", "yourtable"), value = yourRdataframe)
dbDisconnect(con)

詳細:https ://stat.ethz.ch/pipermail/r-sig-db/2011q1/001043.html

于 2012-08-17T07:19:41.000 に答える
6

オブジェクトが作成されるデフォルトのスキーマは、 によって定義されますsearch_path。1 つの方法は、それに応じて設定することです。例えば:

SET search_path = myschema, public;

マニュアルを引用します:

特定のターゲット スキーマを指定せずにオブジェクトを作成すると、それらは検索パスにリストされている最初のスキーマに配置されます。検索パスが空の場合、エラーが報告されます。

これをロールのデフォルトにすることもできるので、このロールによって行われるすべての接続に対して自動的に設定されます。もっと:

于 2012-04-05T17:15:31.693 に答える