2

我有一个奇怪的问题 - 在我的sails 应用程序启动时(它与 postgres 连接并部署在 heroku 上)有多个连接(大约 10 个)到数据库,并且由于它是免费帐户,如果我尝试启动应用程序localhost 来测试一些新代码我得到一个错误“一个角色的连接太多”。那么有谁知道为什么有这么多与数据库的连接,我可以更改它,使每个应用程序只有一个连接吗?

编辑:创建与 Postgresql 的连接时出错:错误:角色“xwoellnkvjcupt”的连接太多 创建与 Postgresql 的连接时出错:错误:角色“xwoellnkvjcupt”的连接太多错误:钩子加载失败:orm(错误:连接太多对于角色“xwoellnkv jcupt”)错误:加载 Sails 核心时遇到错误!错误: 错误: Connection.parseE (C:\Studia\szachman2\node_modules\sails-postgresql\node _modules\pg\lib\connection.js:561:11) 处 Connection.parseMessage ( C:\Studia\szachman2\node_modules\sails-postgresq l\node_modules\pg\lib\connection.js:390:17) 为空。(C:\Studia\szachman2\node_modules\sails-postgresql\node_modules\pg\lib\connection.js:98:18) 在 CleartextStream.EventEmitter.emit (events.js:95: 17) 在 CleartextStream。(_stream_readable.js:746:14) 在 CleartextStream.EventEmitter.emit (events.js:92:17) 在emitReadable_ (_stream_readable.js:408:10) 在 _stream_readable.js:401:7 在 process._tickDomainCallback (node. js:459:13)

这是我在尝试在 localhost 上测试一些新代码时经常遇到的错误。

4

3 回答 3

5

@jantar @sgress454 我刚刚添加了一条故障排除消息,sails-postgresql试图让它变得更好。它是这样说的:

->也许你的poolSize配置设置得太高了?例如,如果您的 Postgresql 数据库只支持 20 个并发连接,您应该确保您的poolSize设置为 < 20。默认poolSize值为 10。

要覆盖默认值poolSize,请在相关的 Postgresql“连接”配置对象上指定一个poolSize属性。如果您使用的是 Sails,它通常位于config/connections.js或设置特定环境的数据库配置的任何位置。

->你有多个 Sails 实例共享同一个 Postgresql 数据库吗?每个 Sails 实例最多可以使用配置poolSize的连接数。假设所有 Sails 实例只是彼此的副本(一种合理的最佳实践),我们可以通过将配置的poolSize(P) 乘以 Sails 实例的数量 (N) 来计算实际使用的 Postgresql 连接数 (C)。如果实际连接数 (C) 超过了与您的 Postgresql 数据库 (V) 的AVAILABLE连接总数,那么您就有问题了。如果这适用于您,请尝试减少您的poolSize配置。一个合理的poolSize设置是 V/N。

于 2014-12-09T20:11:23.710 回答
1

这是由于 Sails 的自动迁移功能试图保持您的模型和数据库同步。它不打算在生产中使用。migrate: safe您可以通过添加到模型定义来关闭单个模型的自动迁移:

module.exports = {
    migrate: 'safe',
    attributes: {...}
}

您可以通过添加配置来关闭所有model模型的自动迁移,通常在您的config/locals.js

module.exports = {

    model: {
        migrate: 'safe'
    },
    environment: 'production',
    ...other local config...
}
于 2014-04-09T14:27:36.750 回答
1

V1 的小更新。如果您想为连接池设置最大大小,您在 config/datastore.js 中的适配器应该如下所示:

{
  adapter: 'sails-postgresql',
  url: 'yourconnectionurl',
  max: 1 // This is the important part for poolSize, I set 1 because I don't want more than 1 connection ^^
}

如果您想知道可以设置的所有信息,请查看此处:https ://github.com/sailshq/machinepack-postgresql/blob/176413efeab90dc5099dc60718e8b520942ce3be/machines/create-manager.js ,第 162 行:

// Basic:
        'host', 'port', 'database', 'user', 'password', 'ssl',

        // Advanced Client Config:
        'application_name', 'fallback_application_name',

        // General Pool Config:
        'max', 'min', 'refreshIdle', 'idleTimeoutMillis',

        // Advanced Pool Config:
        // These should only be used if you know what you are doing.
        // https://github.com/coopernurse/node-pool#documentation
        'name', 'create', 'destroy', 'reapIntervalMillis', 'returnToHead',
        'priorityRange', 'validate', 'validateAsync', 'log'
于 2019-03-03T11:21:46.593 回答