首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用R的池包重新连接到PostgreSQL数据库

用R的池包重新连接到PostgreSQL数据库
EN

Stack Overflow用户
提问于 2019-03-04 10:00:12
回答 1查看 2K关注 0票数 9

我有一个用R 水管工构建的API,它使用RPostgreSQL池子连接到PostgreSQL数据库(尽管如果我使用的是一个闪亮的应用程序,这也适用):

代码语言:javascript
运行
AI代码解释
复制
# create the connection pool
pool <- dbPool(
  drv = PostgreSQL(),
  host = Sys.getenv("DB_HOST"),
  port = 5432,
  dbname = "db",
  user = Sys.getenv("DB_USER"),
  password = Sys.getenv("DB_PASSWORD")
)

# start the API
pr <- plumb("plumber.R")

# on stop, close the pool
pr$registerHooks(
  list("exit" = function() { poolClose(pool) })
)

我想每天导入新的数据。最简单的方法是创建一个新的数据库并将其推广到生产中:

代码语言:javascript
运行
AI代码解释
复制
CREATE DATABASE db_new;
-- create the tables
-- bulk-insert the data
SELECT pg_terminate_backend (pid) FROM pg_stat_activity WHERE datname = 'db';
DROP DATABASE db;
ALTER DATABASE db_new RENAME TO db;

这是快速和最小化的停机时间。问题是,pool随后丢失的是到数据库的连接,并且不会自动尝试重新连接:

代码语言:javascript
运行
AI代码解释
复制
> tbl(pool, "users")
Error in postgresqlExecStatement(conn, statement, ...) : 
  RS-DBI driver: (could not Retrieve the result : FATAL:  terminating connection due to administrator command
server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
)

即使我没有每天更换数据库,DB服务器偶尔也会重新启动,这也会导致我的应用程序崩溃。重新连接似乎不是池、RPostgreSQL或DBI的特性。有人知道解决这个问题的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 23:00:04

我使用带有以下函数的普通DBI (没有池)始终为DBI调用提供活动连接(例如DBI::dbExistsTable(rdsConnect(),"mytable"))。

代码语言:javascript
运行
AI代码解释
复制
#' Connect returns a database connection.
#' Retrieves the connection parameters from configuration.
#' 
#' FIXME: dbIsValid is not implemented
#' https://github.com/tomoakin/RPostgreSQL/issues/76
#' workaround implemented with isPostgresqlIdCurrent()
#' @return rds allocated connection
rdsConnect <- function() {
  if (!((exists("rds") && (isPostgresqlIdCurrent(rds))))) {
    source('./config.R', local = TRUE)
    print("New PostgreSQL connection")
    rds <<- DBI::dbConnect(RPostgreSQL::PostgreSQL(),
      dbname = rds_params("rds_database"),
      host = rds_params("rds_host"),
      user = rds_params("rds_user"),
      password = rds_params("rds_password")
    )
  } else print("Valid PostgreSQL connection")
  return(rds)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54988978

复制
相关文章
如何查询InfluxDB
InfluxDB是一个很流行的基于时间序列的数据库,下面是这个数据库的最基本的查询命令。InfluxDB使用类SQL(实际上它就是一种特殊的“SQL”)的语言。
大数据弄潮儿
2018/05/21
11.4K1
「influxDB 原理与实践(二)」详解influxDB的写入与查询
RESTful风格的接口,返回JSON格式的响应数据,并支持身份认证、JWT令牌、丰富的HTTP响应代码等。 influxDB API接口及接口的定义描述如下图所示:
源码之路
2020/09/04
8.3K0
「influxDB 原理与实践(二)」详解influxDB的写入与查询
InfluxDB使用HTTP的API查询数据
HTTP API是在InfluxDB中查询数据的主要方法(有关查询数据库的其他方法,请参阅命令行界面和客户端库)。
Devops海洋的渔夫
2019/05/31
3.8K0
「influxDB 原理与实践(三)」连续查询
通过创建连续查询,用户可以指定InfluxDB执行连续查询的时间间隔、单次查询的时间范围以及查询规则。InfluxDB会根据用户指定的规则,定期的将过去一段时间内的原始时序数据以用户所期望的方式保存至新的结果表中,从而降低存储数据的时间精度,大大减少新表的数据量。同时,将查询结果保存在指定的数据表中,也便于用户直接查询所关心的内容,从而降低查询的运算复杂度,提升查询效率。
源码之路
2020/09/04
3K0
「influxDB 原理与实践(三)」连续查询
MySQL 查询最后分区
用户1148526
2023/10/14
3510
InfluxDB常见问题和解答 - 如何在InfluxDB中实现嵌套子查询
大多数InfluxQL的内置函数不支持函数的嵌套,可以借助连续查询来实现类似的功能,先通过连续查询做实现子查询功能,把结果保存到新表中,然后再对新表中的结果执行查询。
hanj4096
2019/11/25
4K0
InfluxDB常见问题和解答 - 如何在InfluxDB中实现嵌套子查询
复杂一点的查询
一:inner join inner join   是在做排除,如果任一行在两个表中不匹配,则注定将从最终的结果中排除掉 例子1:select * from employee e inner join employee m on e.managerid = m.employeeid 这是从一个表里查询了两次 得到的一行记录将包括两个employee的信息  前面的是经理  后面的是打工的 注意from哪个表  哪个表的信息就在前面 其中e和m分别是表的别名,这里的别名和列的别名不同,不用写as
liulun
2022/05/08
6290
4. InfluxDB使用HTTP的API查询数据
使用HTTP API查询数据https://docs.influxdata.com/influxdb/v1.7/guides/querying_data/
Devops海洋的渔夫
2022/01/14
1.2K0
InfluxDB
另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/influxdb/influxdb.conf。
框架师
2021/03/05
1.5K0
influxdb使用
插入数据(python接口) data = "mycomputer,uuser=yzh cpu={}".format(cpu) async with session.post("http://loca
超级大猪
2019/11/22
1.1K0
influxdb使用
influxdb 学习
数据点包括time(一个时间戳),measurement(例如cpu_load),至少一个k-v格式的field(也即指标的数值例如 “value=0.64”或者“temperature=21.2”),零个或多个tag,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。
solate
2019/07/22
2.7K0
Install InfluxDB
这两方面的特性 Elasticsearch 也有覆盖,那它们两者的区别是什么呢,可以参考下面的文章
franket
2021/08/11
9770
Influxdb 编译
编译针对当前 github上influxdb的master代码 其实github上的CONTRIBUTING.md 里已经说的很明白,按其一步步来开即开,唯一遇到的问题可能就是下载依赖时被墙无法下载,下文给了解决方案; 我们按CONTRIBUTING.md 上的步骤再来梳理一下 安装golang 1.11, 最新版 Influxdb编译要求golang 1.11的支持,这个大家各显神通吧,安装好后设置好你的GOPATH; 安装Dep, 这个用来下载编译依赖用,针对被墙的依赖,这个并没有什么用; go
扫帚的影子
2018/12/07
1.3K0
Influxdb + Chronograf
官方最新版本下载地址: [https://portal.influxdata.com/downloads/%5D
用户10325771
2023/03/01
8830
InfluxDB 3.0简介:InfluxDB IOx的演变
InfluxDB 3.0 现在是当前和未来所有 InfluxDB 产品的基础,首次为 InfluxDB 平台带来了高性能、无限基数、SQL 支持和低成本对象存储。InfluxDB 3.0 在 Rust 中作为列式数据库开发,在单个数据存储中引入了对各种时间序列数据(指标、事件和跟踪)的支持,以支持依赖于高基数时间序列数据的可观测性、实时分析和 IoT/IIoT 用例。
gemron的空间
2023/05/02
6.3K0
InfluxDB 3.0简介:InfluxDB IOx的演变
InfluxDB从原理到实战 - 什么是InfluxDB
InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等,在DB-Engines Ranking时序型数据库排行榜上排名第一,广泛应用于DevOps监控、IoT监控、实时分析等场景。
hanj4096
2019/08/27
5.8K0
InfluxDB从原理到实战 - 什么是InfluxDB
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案
InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
奇小在
2022/10/22
2.6K0
influxDB 常用操作
在influxDB的CLI界面执行precision rfc3339即可,但是显示是UTC的时区,与中国时区差了8个小时,需要在查询语句的最后加上tz('Asia/Shanghai'),这样查询的时间才是纠正为中国时区显示。
Devops海洋的渔夫
2019/05/31
2.1K0
InfluxDB关键概念
前一篇根据InfluxDB的官方开源文档进行了一次实践。这篇来继续看看InfluxDB的关键概念。
Devops海洋的渔夫
2019/06/02
6400
influxdb基础入门
influxdb的单机版是开源的,而集群版是商业版,influxdb被设计运行在SSD上,如果使用机器或者网络磁盘作为存储介质,会导致性能下降至少一个数量级。influxdb支持restful api,同时也支持https,为了保证安全性,非局域网建议使用https与Influxdb进行通信。
luoxn28
2020/02/17
1.3K0
influxdb基础入门

相似问题

InfluxDB sum最后一点

135

InfluxDB流量查询每组最后一条记录

111

InfluxDB查询错误

22

influxDB查询速度

15

InfluxDB -只获取查询中的最后一个值

70
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档