标签: pgbouncer

如何在Linux上重启时启动PGBouncer自动启动?

在Windows Azure VM中的Ubuntu 12.04(精确)上,我在同一台机器上运行了postgres和pgbouncer.一切都设置好并且有效但是当重新启动VM时,pgbouncer不会自动启动.

  1. 如何使它在重启时启动?
  2. Postgres是否需要在PGBouncer之前运行?如果是这样,这是如何实现的?我假设PGBouncer仍会运行,如果Postgres没有运行,或者这个假设是错误的,任何sql连接都无法连接?

我开始运行它的命令如下.注意:我需要成为'postgres'用户才能启动服务,否则会失败.还详细的答案preferrend.Linux不是我的普通操作系统.

sudo su postgres
pgbouncer -d -v /etc/pgbouncer/pgbouncer.ini
Run Code Online (Sandbox Code Playgroud)

如果有用,这就是pgbouncer的安装方式:

sudo apt-get install postgresql-9.3 pgbouncer
Run Code Online (Sandbox Code Playgroud)

注意:我只能在第一次运行pgbouncer -d -v /etc/pgbouncer/pgbouncer.ini命令后与pgbouncer服务(强制重新加载,状态,启动,停止)进行交互.

linux postgresql ubuntu azure pgbouncer

6
推荐指数
1
解决办法
4433
查看次数

Golang - pgbouncer 和事务使用

技术细节

  • 去版本1.2
  • 用于 go bmizerany/pq 的 postrgres 库

这个问题让我发疯,我希望有人能够提供帮助。

我在 golang 中开发了一个应用程序,用于从 postgres 数据库读取数据,并对每条记录发出 http 请求,然后更新数据库。

这一切都很简单。不过,我们有 pgbouncer。我们对 pgbouncer 的配置是不支持准备好的语句。Go 默默地将所有查询包装在准备好的语句中。pgbouncer 解决这个问题的方法是设置一个事务。对于插入/更新/删除之类的事情来说,这一切都很好。

对于 select 语句,我将其包装在事务中:

func TransactionQuery(db *sql.DB, baseQuery string) (rows *sql.Rows, code int, err error) {
        tx, txErr := db.Begin()
        if txErr != nil {
            return nil, -1, txErr
        }

        selectStmt, prepErr := tx.Prepare(baseQuery)
        if prepErr != nil {
            return nil, -1, fmt.Errorf("Failed to prepare statment: %s Error: %v", baseQuery, prepErr)
        }

        defer func() {
            if stmtErr := selectStmt.Close(); …
Run Code Online (Sandbox Code Playgroud)

postgresql go pgbouncer

5
推荐指数
1
解决办法
3049
查看次数

接收"ActiveRecord :: StatementInvalid:PG :: ConnectionBad:PQconsumeInput()无法从服务器接收数据:连接超时"在rake任务中

在我的rake任务中,我通过pgbouncer设置连接到postgresql.对于某些查询,我收到此错误:

ActiveRecord::StatementInvalid: PG::ConnectionBad: PQconsumeInput() could not receive data from server: Connection timed out
Run Code Online (Sandbox Code Playgroud)

在我的pgbouncer日志中,我看到了这个条目:

closing because: client unexpected eof (age=3110)
Run Code Online (Sandbox Code Playgroud)

我在我的config/database.yml文件中禁用transaction pool_mode了预准备语句,并在我的pgbouncer配置文件中启用.当我直接连接到postgres时,我没有收到此错误.

同样在我的rake任务中,我正在创建多个线程.我ActiveRecord::Base.connection.reconnect!按照这里的建议尝试在我的线程内运行.这也没有帮助.

我正在使用rails版本4.2.5,它有此修复程序.我仍然收到此错误"无法从服务器接收数据:连接超时".

postgresql activerecord multithreading ruby-on-rails pgbouncer

5
推荐指数
1
解决办法
501
查看次数

Pgbouncer 日志仅显示 0 req/s

这是我的第一篇 stackoverflow 帖子,所以我想打个招呼!;)

我对 pgbouncer 有疑问。我刚刚开始将它与我的 django 应用程序和 postgres 一起使用。我虽然一切都设置正确,但我在日志中只得到这样的信息:

"LOG Stats: 0 req/s, in 0 b/s, out 0 b/s"
Run Code Online (Sandbox Code Playgroud)

它似乎没有运行,或者我错过了它的概念?除了那些只有 0 的统计行之外,没有其他错误。该应用程序每秒不断运行,有数十人使用它,建立数据库连接,因此应该记录一些内容,对吗?您知道为什么会发生这种情况吗?谢谢!

postgresql pgbouncer

5
推荐指数
1
解决办法
1063
查看次数

PgBouncer 与 WildFly/Application Server 连接池的优势?

许多应用程序服务器都集成了连接池,甚至可以配置独立应用程序以使用 HikariCP、Apache DBCP 等。

那么当应用程序已经有连接池时,使用PgBouncer有什么好处呢?

我发现的最接近的答案是使用 pgbouncer 进行事务池的优点是什么?其中没有提到使用另一个连接池,并提到优点是空闲会话的使用。

我主要使用 WildFly 配置了最小池大小、最大池大小、空闲超时...因此它基本上会在不使用时删除空闲连接(如果这是主要优点)。

这让我认为 PgBouncer 不适合这种情况,我应该只继续使用我的应用程序服务器连接池。

顺便说一句,在事务池模式下,PgBouncer 无法使用命名准备语句,这看起来不是一个性能明智的选择。

如果有什么优点的话,它与 Wildfly 连接池配合得好吗?

java postgresql jdbc pgbouncer wildfly

5
推荐指数
1
解决办法
1612
查看次数

pgbouncer 无法连接到服务器

我已经在 Windows 上安装和配置了 pgbouncer。pgbouncer 服务正在运行,但是当我将它与 postgres 9.6 连接时,它抛出错误'

pgbouncer 无法连接到服务器

' 使用 pgbouncer 端口创建服务器

pgbouncer configurations are:
postgres = host=127.0.0.1 port=4851
staging29-6-1016 = host=localhost port=4851 dbname=staging29-6-1016
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = C:\Program Files (x86)\PgBouncer\etc\userlist.txt
Run Code Online (Sandbox Code Playgroud)

userlist.txt 还包含 md5 加密密码

postgresql.conf 文件包含:

监听地址 = '*' 端口 = 4851

请帮助我如何消除此错误。

2017-08-03 15:23:33.429 2360 LOG C-00EA8FE0: postgres/postgres@[::1]:54985 login attempt: db=postgres user=postgres tls=no 
2017-08-03 15:23:33.429 2360 LOG C-00EA8FE0: postgres/postgres@[::1]:54985 closing because: pgbouncer cannot connect to server (age=0) 
2017-08-03 15:23:33.430 …
Run Code Online (Sandbox Code Playgroud)

pgbouncer postgresql-9.3

5
推荐指数
0
解决办法
6146
查看次数

PGBouncer + JDBC 中的 connect_query 设置

我正在将 PGBouncer 配置为我的应用程序的数据库连接池。我还将它与会话池模式一起使用。

由于一些应用程序的要求,我需要在每个连接的使用过程中保留一个临时表。我当前正在做的是使用connect_query设置来创建临时表。

根据文档,此查询“在建立连接后执行”。据我所知,这意味着每次从池中借用连接时都会执行connect_query 。

我想避免的是以下情况:

  1. 我从池中借用一个连接,如果物理连接不存在,则会创建它。connect_query将被执行
  2. 我将连接返回到池中。
  3. 我再次请求与池的连接,假设池重用了步骤 1) 中使用的相同连接并返回它。再次执行connect_query

更新 我可以看到,当通过 JDBC 连接到 PGBouncer 并使用该连接执行查询时,每个连接请求都会执行一次 connect_query。请参阅下面的 java 类作为示例:

public class TestPgbouncerConnectQuery {

  public static void main(String[] args) {
    for (int i = 0; i < 1000; i++) {
      try {
        System.out.println("Iteration: " + i);
        Connection conn = getConnection();
        executeQuery(conn);
        conn.close();
      } catch (SQLException e) {
      }
    }
  }

  private static Connection getConnection() {
    Connection conn = null;
    try {
      Properties properties = …
Run Code Online (Sandbox Code Playgroud)

java postgresql jdbc pgbouncer

5
推荐指数
1
解决办法
2825
查看次数

通过 pgbouncer 连接时 pgAdmin 上出现“没有这样的数据库”错误

我已经在服务器A(端口6432,主机地址:10.XX.XX.92 )上配置了pgbouncer ,它将接受在服务器B(端口5433,主机地址:10.XX.XX.90)上运行的postgres服务器的连接。该 postgres 服务器有 2 个数据库。(postgres 和 db1

我有 2 个不同类型的用户(user1、user2)将连接到同一数据库(db1)。这两个用户对 db1 具有不同的权限集。

下面是我如何配置 pgbouncer.ini 文件的示例。

数据库1 = 主机=10.XX.XX.90 端口=5433 用户=user1 密码='pwd1' dbname=db1
数据库2 = 主机=10.XX.XX.90 端口=5433 用户=user2 密码='pwd2' dbname=db1

现在,当我尝试通过 pgAdmin 连接到此数据库时,它给我一个错误“没有这样的数据库”

以下是我用于通过 pgadmin 连接 user1 的连接变量。

主机=10.XX.XX.92
端口=6432
维护数据库=database1
用户名=user1
密码=pwd1

但是当我使用相同的变量并尝试使用 DBeaver 或 psql 连接时,我能够成功连接到数据库 db1。

有谁知道这只是 pgAdmin 问题还是我在这里遗漏了一些东西。

注意:我还尝试过一件事。如果在 pgbouncer.ini 中,我将数据库变量(database1)命名为与实际数据库名称(db1)相同,则 pg Admin 允许我连接到数据库。如果我只有一个用户连接到数据库,但我有两个用户,并且他们在配置文件中不能有相同的连接名称,那么这对我有用。

postgresql pgbouncer pgadmin-4

5
推荐指数
1
解决办法
5138
查看次数

在 pg_bouncer 后面使用 pg_dump 后,search_path 似乎被更改并且其他客户端受到影响

我的网络如下所示:

App       (many connections)   pg_bouncer  (few sessions)   PostgreSql
nodes  -----------------------   nodes   -----------------    nodes
Run Code Online (Sandbox Code Playgroud)

因此 pg_bouncer 多路复用连接,让应用程序节点产生它们都是直接连接的错觉。

当我启动 pg_dump 时,问题就出现了:转储完成后几毫秒,所有应用程序节点都会失败,并显示错误“关系 xxxx 不存在”,尽管表或序列实际上存在。我很确定原因是 pg_bouncer 操纵“search_path”变量,以便应用程序节点不再在我的架构中找到表。即使未导入或未执行转储文件,也会在转储时发生这种情况。

请注意,我已经搜索过 SO 和 google,并且看到有很多线程询问生成文件中的search_path ,但这不是我要问的。我对生成的文件没有任何问题,我的问题是pg_bouncer 会话,我还没有找到任何与此相关的信息。

最明显的解决方法可能是在应用程序中手动设置 search_path ,但请注意,不要陷入这种谬论:应用程序在开始时执行此操作是没有用的,因为它可能会在下一次分配不同的 pg_bouncer 会话交易。而且我不能一直设置它。

下一个最明显的解决方法是在启动 pg_dump 后立即将其设置回预期值,但这里存在竞争条件,并且其他节点足够快,因此我担心它们仍然会失败。

有没有办法避免让 pg_dump 操纵这个变量,或者确保它在退出之前重置它?

(另外,我理所当然地认为 pg_dump 和 search_path 是造成这种情况的原因,你能建议一种方法来确认这一点吗?我拥有的所有证据都是几毫秒后的错误以及生成文件中的 set search_path 指令,该指令产生如果执行的话也会出现同样的错误。)

谢谢

postgresql pg-dump pgbouncer

5
推荐指数
1
解决办法
624
查看次数

在 AWS RDS 上安装适用于 PostgreSQL 的 PgBouncer

几个月前,我们在 AWS RDS 中创建了一个 PostgreSQL 生产数据库,现在我们收到应用程序团队的要求,要求在其中安装连接池 - PgBouncer。

我看不到 AWS 团队提供的任何正确文档显示安装 PgBouncer 并在 AWS RDS PostgreSQL 数据库实例中配置它的步骤。

是否可以在 AWS RDS PostgreSQL 数据库实例中安装 PgBouncer?如果是,有人可以帮助我并分享在 AWS RDS PostgreSQL 中安装和配置 PgBouncer 的步骤吗?

谢谢你!

postgresql database-administration amazon-web-services amazon-rds pgbouncer

5
推荐指数
0
解决办法
4713
查看次数