小编Don*_*ato的帖子

为什么同时有 postmaster 和 postgres 可执行文件?

有点令人困惑的是如何使用多个可执行文件来启动 postgresql,例如 postmaster、postgres、pg_ctl。

postmaster -D /usr/local/pgsql/data
postgres -D /usr/local/pgsql/data
pg_ctl -D /usr/local/pgsql/data
Run Code Online (Sandbox Code Playgroud)

我知道 pg_ctl 旨在简化启动 postgres 的过程,但 postmaster 和 postgres 似乎是相同的二进制文件。看来 postmaster 是 postgres 的符号链接。这样做有什么好处呢?

postgresql

8
推荐指数
1
解决办法
4723
查看次数

无法使用 pg_ctl 运行 postgres

我正在阅读一本 postgresql 书(从新手到专业版的 PostgreSQL),它说您可以通过调用作为安装一部分的 postgres 二进制文件来启动 postmaster 守护进程:

/usr/lib/postgresql/9.3/bin/postgres "-D" "/var/lib/postgresql/9.3/main" "-c" "config_file=/etc/postgresql/9.3/main/postgresql.conf"
Run Code Online (Sandbox Code Playgroud)

请注意,我们必须将数据目录和配置作为参数传递给 postgres 二进制文件。

然后这本书继续说 pg_ctl 可执行文件,当通过 apt-get 安装时,它也恰好存储在 /usr/lib/postgresql/9.3/bin 目录中,用于简化任务。但我无法让 pg_ctl 运行:

$ /usr/lib/postgresql/9.3/bin/pg_ctl -D "/var/lib/postgresql/9.3/main" start
server starting
postgres@estonia:/usr/lib/postgresql/9.3/bin$ postgres cannot access the server configuration file "/var/lib/postgresql/9.3/main/postgresql.conf": No such file or directory
Run Code Online (Sandbox Code Playgroud)

它说找不到配置文件,但是这里没有办法指定配置文件:

$ /usr/lib/postgresql/9.3/bin/pg_ctl start "-D" "/var/lib/postgresql/9.3/main" "-c" "config_file=/etc/postgresql/9.3/main/postgresql.conf"
pg_ctl: too many command-line arguments (first is "start")
Try "pg_ctl --help" for more information.
Run Code Online (Sandbox Code Playgroud)

如何让 pg_ctl 运行?

postgresql

6
推荐指数
2
解决办法
3万
查看次数

postgresql 中的 xact_start 和 query_start 有什么区别?

我正在查看 pg_stat_activity 视图。有两个领域对我来说是无法区分的:

xact_start:事务开始运行的时间,可能与 query_start 不同,但应始终发生在 query_start 时间之前。

query_start:查询开始运行的时间。这对于确定查询是否已运行很长时间很有用。

它说它们都决定了查询的开始时间。它还说 xact_start 可以与 query_start 不同,但没有解释为什么 - 只是它应该在 query_start 之前启动。但两者之间的实际区别是什么?为什么我会关心 xact_start?

postgresql

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

使用 pg_statio_user_tables 的缓存命中率

我从这个博客中读到,您数据库中只有 20% 的数据获得了 80% 的大量读取。这意味着经常访问数据库中的一小部分数据。因此,您希望确保在缓存(主内存)而不是磁盘中访问 20%。最终,您希望缓存命中率达到 99%。博客提供了这个命令来查找缓存命中率:

SELECT 
  sum(heap_blks_read) as heap_read,
  sum(heap_blks_hit)  as heap_hit,
  sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM 
  pg_statio_user_tables;  
Run Code Online (Sandbox Code Playgroud)

好的,所以我期待接近 99% 的数字,但现在这是我得到的数字:

#   pg_statio_user_tables;
   heap_read   |   heap_hit    |         ratio          
---------------+---------------+------------------------
 2214811975866 | 1791164728361 | 0.44712310145763220493
(1 row)
Run Code Online (Sandbox Code Playgroud)

0.44?这甚至不接近 99%。这一定意味着大多数命中都发生在磁盘上,而缓存几乎不存在。什么可能导致这个问题?

postgresql

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

无法打开日志文件“/var/log/postgresql-2015-05-24_181212.log”:权限被拒绝

我在 Ubuntu 14.04 上从源代码安装了 postgresql(我之前也从存储库安装过,我现在只想感受一下它们,因为我将严重依赖这个数据库)。因此,当我从源代码安装时,在我的 postgresql.conf 中,我指定我希望 postmaster 可执行文件中的所有标准错误都转到 /var/log:

log_destination = 'stderr' 
logging_collector = on
log_directory = '/var/log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
Run Code Online (Sandbox Code Playgroud)

我知道只有 root 可以写入 /var/log(这是 Ubuntu 上的默认设置),那么人们是如何做到这一点的呢?如何在该日志文件存在之前使其可写?还是人们先手动创建日志文件然后更改其权限?

不幸的是,我的临时解决方案是对 log_filename 的文件名进行硬编码,例如 postgresql-9.4.2-main.log,然后以 root 身份在 /etc/log 中创建该文件,然后将其所有权更改为 postgres,然后当我启动服务器它工作正常。但我希望日志文件是动态的。在达到指定大小后,我希望将旧的压缩起来,并使用当前日期和时间创建一个新的。

postgresql logs configuration

2
推荐指数
1
解决办法
8566
查看次数

标签 统计

postgresql ×5

configuration ×1

logs ×1