gpt4 book ai didi

postgresql - 无法使用 node-postgres 连接到 Cloud SQL

转载 作者:行者123 更新时间:2023-11-29 14:13:21 27 4
gpt4 key购买 nike

我一直在尝试使用 pg 模块连接到我的 Cloud SQL 实例,但到目前为止还没有成功。

我在网上看了很多,但对这个话题了解不多。我还想在某个时候在 Cloud Run 上部署我的 Express 应用程序并将其连接到我的 Cloud SQL 实例,但我不知道如何去做。

这是我不明白的事情列表,希望得到简要解释:

  1. 什么是 Unix 套接字连接,为什么要在普通连接上使用它们?
  2. 什么是 Cloud SQL 代理?我需要使用它吗?如果是,为什么?
  3. 我是否需要做任何额外的工作才能从 Cloud Run 连接到我的 Cloud SQL 实例?

以下是我尝试使用 pg.Client 对象的所有连接对象和连接字符串:

  1. 第一个连接字符串:postgresql+psycopg2://postgres:password@/cloudsql/myapp:us-central1:mydb?host=/var/lib/postgresql
  2. 第二个连接字符串:postgresql://postgres:password@hostip:5432/myapp:us-central1:mydb
  3. 第三个连接字符串:postgresql://postgres:password@hostip:5432/sarcdb
  4. 连接对象:{ 主机:“/cloudsql/myapp:us-central1:mydb”,用户名:“postgres”,密码:“password”,数据库:“mydb”

所有这些都给我一个连接意外终止错误。

最佳答案

Cloud Functions documentation for Node.js & Cloud SQL (向下滚动到 PostgreSQL)包含有关构造连接字符串和凭据所需的其他配置的适用信息。

为您的应用准备好后,您需要 add the Cloud SQL instance to your Cloud Run service在它能够使用该连接字符串到达​​数据库之前。

此处直接从文档中复制代码示例,使用 Cloud Run 时 max 配置为 1 可能跟不上其他并发设置。

const pg = require('pg');

/**
* TODO(developer): specify SQL connection details
*/
const connectionName =
process.env.INSTANCE_CONNECTION_NAME || '<YOUR INSTANCE CONNECTION NAME>';
const dbUser = process.env.SQL_USER || '<YOUR DB USER>';
const dbPassword = process.env.SQL_PASSWORD || '<YOUR DB PASSWORD>';
const dbName = process.env.SQL_NAME || '<YOUR DB NAME>';

const pgConfig = {
max: 1,
user: dbUser,
password: dbPassword,
database: dbName,
};

if (process.env.NODE_ENV === 'production') {
pgConfig.host = `/cloudsql/${connectionName}`;
}

// Connection pools reuse connections between invocations,
// and handle dropped or expired connections automatically.
let pgPool;

exports.postgresDemo = (req, res) => {
// Initialize the pool lazily, in case SQL access isn't needed for this
// GCF instance. Doing so minimizes the number of active SQL connections,
// which helps keep your GCF instances under SQL connection limits.
if (!pgPool) {
pgPool = new pg.Pool(pgConfig);
}

pgPool.query('SELECT NOW() as now', (err, results) => {
if (err) {
console.error(err);
res.status(500).send(err);
} else {
res.send(JSON.stringify(results));
}
});

// Close any SQL resources that were declared inside this function.
// Keep any declared in global scope (e.g. mysqlPool) for later reuse.
};

关于postgresql - 无法使用 node-postgres 连接到 Cloud SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58129579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com