我有一个c#应用程序,应该在应用程序的第一次启动时将postgresql服务器的shared_buffers
设置为至少512MB。因此,我需要在代码中执行以下操作:
- 检查
shared_buffers
是否小于512MB - 设置
shared_buffers
为512MB - 重新启动postgresql服务器以应用更改。
- 重启完成后继续运行应用程序。
如何在代码中做到这一点?
在PostgreSQL 9.4及以上版本中,可以使用ALTER SYSTEM SET
来修改postgresql.auto.conf
来添加参数
所以你可以:
SHOW shared_buffers;
如果太低:
ALTER SYSTEM
SET shared_buffers = '512MB';
你必须重新启动PostgreSQL。根据设计,这不能在PostgreSQL内部完成,因为如果在重新启动期间出现问题,那么您将无法再连接到它,因此您可以很容易地将自己锁定在外。您可以使用SELECT pg_reload_conf()
重新加载配置,但是shared_buffers
只在完全重启时生效,而不仅仅是重新加载配置。
所以一旦你修改了配置,你的应用将需要使用一个外部的特定于操作系统和特定于安装方法的方式来重启PostgreSQL。或者直接告诉用户帮你重新启动。
重启:对于任何自定义安装和管理PostgreSQL的平台(Windows, Mac或Linux),使用
pg_ctl restart
。在Windows上,作为服务安装:先使用
net stop [servicename]
,然后使用net start [servicename]
在系统级安装了PostgreSQL的旧版Linux (pre-systemd)上:使用
service
命令,例如service restart [servicename]
。在安装了PostgreSQL的新Linux (systemd)上:使用
systemctl restart [servicename].service
如果你使用的是没有ALTER SYSTEM SET
的旧版PostgreSQL,你必须打开,修改并写入postgresql.conf
。
为了避免不得不解析和修改整个postgresql.conf
,我发现添加include_dir = 'conf.d'
选项然后在数据目录中创建一个conf.d/myapp.conf
是有用的,只是我想要的配置覆盖。
include_dir
在9.3及更新版本中可用。对于更老的版本,你只需要直接修改postgresql.conf
。
如果你的应用程序首先负责安装和设置PostgreSQL,你可以在配置文件中设置initdb
之后和启动数据库之前所需的shared_buffers
。
如果你在你的应用程序中捆绑PostgreSQL,这是我强烈推荐的方法。不要使用安装程序,只需在安装程序中捆绑二进制文件即可。启动PostgreSQL时,您的应用程序启动通过调用postgres
命令直接,或通过使用pg_ctl
。在程序退出时停止它。使用非默认端口(即不使用5432端口),在postgres
用户下安装而不是,将data目录放在%PROGRAMDATA%MyApppostgres
之类的位置,否则就会避免与正式的PostgreSQL安装冲突。这会帮你省去很多麻烦。
:
- postgresql的NSIS安装
- 将PostgreSQL安装程序添加到我自己的应用程序安装程序 如何安装postgres与NSIS与所有参数?