R连接到dbExistsTable中的postgres return false,但是错误

R connect to postgres return false in dbExistsTable, but it is wrong

我尝试在 postgres 中连接到我的 table。 这是我的数据库的屏幕。

所以我需要 dbo.social 和 table 配置文件。 所以要做到这一点,我尝试

library(RPostgres)
library(DBI)

pw<- {
  "1234"
}

con <- dbConnect(RPostgres::Postgres()
                 , host='1.2.3.4.'
                 , port='5432'
                 , dbname='social'
                 , user='analyst'
                 , password=pw)


#rm(pw) # removes the password

dbExistsTable(con, "social")

和结果

[1] FALSE

为什么是假的,我用黑线标记它存在。

所以

> dbListTables(con)
 [1] "cache"                         "available_permission_modules" 
 [3] "available_permissions"         "counters"                     
 [5] "permissions"                   "group_direction"              
 [7] "jobs"                          "oauth_auth_codes"             
 [9] "oauth_access_tokens"           "oauth_refresh_tokens"         
[11] "permissions_rules"             "permissions_rule_user"        
[13] "oauth_clients"                 "oauth_personal_access_clients"
[15] "users"                         "directions"                   
[17] "themes"                        "profiles_without_rating"      
[19] "failed_jobs"                   "model_has_permissions"        
[21] "regions_oktmo"                 "ch_profiles"                  
[23] "user_reports"                  "roles"                        
[25] "migrations"                    "crime_minor"                  
[27] "governments"                   "mapping_candidates"           
[29] "password_resets"               "responsible"                  
[31] "spatial_ref_sys"               "model_has_roles"              
[33] "population"                    "role_has_permissions"         
[35] "geo_point"                     "geo_polygon"                  
[37] "crime_all"                     "geography_columns"            
[39] "geometry_columns"              "raster_columns"               
[41] "raster_overviews"              "schools"                      
[43] "post_grabber"                 

为什么列表里没有social.profiles_bstms?

我怎样才能让 social.profiles_bstms tables 使用它。

正如 AEF 和 Data Miner 的直接回复中提到的,您要做的是验证架构 social 中的 table profile_bstms 是否存在(以及此架构位于同名数据库中。

请注意 Postgres Schemas [ref.1] 本身不包含数据;它们用于整理您的 tables。

我以前从未使用过 R,但我发现了一些可以带来一些启发的链接。

  1. https://github.com/r-dbi/RPostgres/issues/160
  2. https://github.com/r-dbi/DBI/issues/277

关于你为什么 dbListTables(con) 不显示那些 tables 的问题:我会说你正在观察的列表来自 tables,它们出现在模式 public,我说得对吗?

如果是这种情况,发生这种情况是因为参数 search_path 不包含您要列出的架构,在本例中为 social.

我的建议是请您尝试更改 search_path 参数。类似于:"$user", public, social。它不需要重新启动数据库。

[1] https://www.postgresql.org/docs/current/ddl-schemas.html

无需设置search_path dbExistsTable(con, Id(schema = "social", table="profile_bstms"))

您还可以使用 dbListObjects(con) 查看所有架构 然后dbListObjects(con, Id(schema = "social"))深入挖掘