Fri*_*xoe 0 postgresql database-connection google-cloud-sql cloud-sql-proxy google-cloud-run
我一直在尝试使用该pg模块连接到我的 Cloud SQL 实例,但到目前为止还没有成功。
我在网上看了很多,但对这个话题不太了解。我还想在某个时候在 Cloud Run 上部署我的 Express 应用程序并将其连接到我的 Cloud SQL 实例,但我不知道如何去做。
这是我不明白的事情的列表,并希望对以下内容进行简要说明:
以下是我尝试使用该pg.Client对象的所有连接对象和连接字符串:
postgresql+psycopg2://postgres:password@/cloudsql/myapp:us-central1:mydb?host=/var/lib/postgresqlpostgresql://postgres:password@hostip:5432/myapp:us-central1:mydbpostgresql://postgres:password@hostip:5432/sarcdb{ host: "/cloudsql/myapp:us-central1:mydb", username: "postgres", password: "password", database: "mydb" }所有这些都给我一个Connection terminated unexpectedly错误。
Node.js 和 Cloud SQL的Cloud Functions 文档(向下滚动到 PostgreSQL)包含有关构建连接字符串和凭据所需的其他配置的适用信息。
为您的应用准备好后,您需要将 Cloud SQL 实例添加到您的 Cloud Run 服务,然后它才能使用该连接字符串访问数据库。
这里直接从文档中复制代码示例,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.
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |