2017-04-13 48 views
0

我有在紅移的模式工作問題使用R.[R紅移dbExistTable dbWriteTable

url <- "jdbc:url:port/database?user=X123&password=fakepassword" 
conn <- dbConnect(driver, url) 

所以我正常連接,而當我列出的表,我注意到默認模式是公開的,但我不連接不想使用該模式,我該如何切換模式?

說,如果它是:lab_space

當我嘗試這一點,但它仍然列出表中公開:

dbListTables(conn, schema='lab_space') 

嘗試這樣做,我得到一個錯誤:

SET search_path = lab_space; 

> SET search_path = 'cust_usr'; 
Error: unexpected symbol in "SET search_path" 

我必須做錯了什麼?

當我試着說支票一張桌子和刪除:

droptable <- dbSendQuery(conn, "drop table if exists lab_space.Tablebla") 

它會放棄它,但還是給我一個錯誤:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", : 
    Unable to retrieve JDBC result set for drop table if exists lab_space.Tablebla ([JDBC Driver]com.amazon.dsi.dataengine.impl.DSISimpleRowCountResult cannot be cast to com.amazon.dsi.dataengine.interfaces.IResultSet) 
+0

在redshift中,您可以設置搜索路徑爲'set search_path to base'(不等於) dbSendQuery(con,「set search_path to base」); – Ravi

回答

0

在紅移,您可以設置搜索與set search_path to <schema_name>(不等於)路徑 dbSendQuery(con,"set search_path to <schema_name>");

您可以分配dbSendQuery()結果爲VAR如果基礎SQL返回一個結果。這裏drop查詢不會返回任何結果集Object。嘗試不分配給任何變種。

dbSendQuery(conn, "drop table if exists lab_space.Tablebla") 
+0

我嘗試了你推薦的所有錯誤,不起作用:> dbSendQuery(conn,「將search_path設置爲cust_usr」) .verify.JDBC.result錯誤(r,「無法檢索JDBC結果集」,: 無法檢索到設置search_path的JDBC結果集爲cust_usr([JDBC驅動程序] com.amazon.dsi.dataengine.impl.DSISimpleRowCountResult不能轉換爲com.amazon.dsi.dataengine.interfaces.IResultSet) –

+0

我收到類似的錯誤對於drop table,它會丟棄表,但是出錯的時候出現了 –

+0

這個switch模式,它也可以工作,但是出錯了,後來當我列出這些表時,它從正確的schema中列出了它們,這些錯誤非常惱人,我是試圖找出原因? –

0

OK,就這一個我與此驅動程序

drv <- dbDriver("PostgreSQL") 

,然後的事情,沒有愚蠢的警告錯誤的工作去了,我猜R和紅移仍然有很多成長做的,不確定: - )