PostgreSQL 是在运行吗?
PostgreSQL 运行了吗摘要本文提供了一份在 Linux 上检查 PostgreSQL 是否运行的故障排除指南包括如何识别正确的实例和端口以及在基于 Debian 和使用 Systemd 的发行版上启动 Postgres 的方法。我在 Postgres 的 slack 和 Telegram 群组 上较少出现在 IRC 上。我经常反复看到同样的问题“Postgres 不能用了你能帮我吗”。不我们帮不了。信息太少了我们什么也做不了。因此我决定为在 Linux 上运行的 Postgres 创建这个小型故障排除指南对于 Windows一些技巧可能准确一些可能不适用。今天的第一部分Postgres 运行了吗如何检查 Postgres 是否运行无论你做什么你都需要知道 Postgres 是否在运行或者是否有多个 Postgres 同时运行。有几种方法可以找出答案这是我结合了朋友们发给我的好技巧后定制的方法pgrep-upostgres-fa---D我应该为昨天甚至不知道pgrep的存在而感到羞耻吗我不这么认为。如果我为自己不知道的一切感到羞耻我就会害怕学习而我当然不想那样所以pgrep会查看进程并尝试在上面执行grep。这是我添加的选项让它按我想要的方式查找-u postgres只会查看由用户postgres拥有的进程-f会在整个命令行中查找模式而不仅仅是进程名-a会显示整个命令行而不仅仅是进程号--会允许以-开头的模式比如我们的-D所以正常情况下你应该看到一行或几行如下[rootcentos7 vagrant]# pgrep -u postgres -fa -- -D2424/usr/pgsql-12/bin/postmaster-D/var/lib/pgsql/12/data/但如果你有多个实例在运行你会看到多行如下rootubuntu:/home/vagrant# pgrep -fa -- -D |grep postgres4499/usr/lib/postgresql/12/bin/postgres-D/var/lib/postgresql/12/main-cconfig_file/etc/postgresql/12/main/postgresql.conf6378/usr/lib/postgresql/12/bin/postgres-D/var/lib/postgresql/12/test-cconfig_file/etc/postgresql/12/test/postgresql.conf如果你有多个 Postgres 同时运行也许你尝试连接的不是正确的实例如果一行都没有那意味着 Postgres 没有启动。如何连接到正确的 Postgres 实例每个 Postgres 实例使用一个端口进行连接。默认情况下使用 5432 端口。你需要找出每个实例使用的端口以便连接到正确的那个。查找$PGDATA目录你很可能会在之前执行的pgrep命令中-D选项后面指示的路径中找到你的$PGDATA目录。所以在我的情况下我的 CentOS 主机上的$PGDATA是/var/lib/pgsql/12/data/而我的 Ubuntu 主机上运行的实例则是/var/lib/postgresql/12/main和/var/lib/postgresql/12/test。查找你的端口找到你的$PGDATA目录后你会找到一个postmaster.pid文件。第 4 行会给出该实例的端口。所以你可能想尝试那个命令来直接获取你的端口号。sed-n4p$PGDATA/postmaster.pid所以对于我的 CentOS 主机这个命令将是sed-n4p /var/lib/pgsql/12/data/postmaster.pid-n标志将确保我们只获取所要求的行。sed 命令将去除任何注释grep 命令将查找port这个词。4表示我们想要第 4 行p表示我们要打印它。如何启动 Postgres同样有几种方法可以启动 Postgres。如果你运行的是基于 Debian 的发行版你会发现 Perl 包装器非常方便。对于 Debian 或基于 Debian包括 Ubuntu的 Linux 发行版首先执行pg_lsclusters来找出你的集群名称$ pg_lsclusters Ver Cluster Port Status Owner Data directory Logfile12main5432online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log要启动该特定的集群你只需要执行pg_ctlclusterVersionNamestart所以在我们的例子中它将是pg_ctlcluster12main start对于使用 Systemd 的发行版如果你的 Linux 发行版使用 Systemd你也可以使用它。要做到这一点你需要服务名称。你可以通过执行这个简单的命令来找到它我假设你的服务已按照 Postgres 下载和安装页面的建议启用systemctl list-unit-files|grepenabled|greppostgres例如我的 CentOS 回答我postgresql-12.service enabled所以要启动该服务你只需要执行systemctl start postgresql-12这太简单了下次我们将看看当 Postgres 拒绝启动时该怎么办是的这种情况经常发生大多数时候是因为你搞砸了但那是另一个故事了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2590077.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!