Postgresql 阿里云部署排雷

启动服务bug:

根据你的输出,可以看到 PostgreSQL 服务启动失败,并且显示以下错误消息:

```

pg_ctl: cannot be run as root

Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.

```

这个错误是因为 PostgreSQL 不允许以 root 用户身份启动。为了解决这个问题,你需要以 PostgreSQL 数据库的拥有者身份启动服务。

你可以使用以下步骤来解决这个问题:

  1. 使用 `su` 命令以 `postgres` 用户身份登录:

```bash

su - postgres

```

输入 `postgres` 用户的密码(如果有密码的话)。

  1. 在 `postgres` 用户会话中,启动 PostgreSQL 服务:

```bash

/data/pgsql/bin/pg_ctl start -D /data/pgsql -s -w -t 270

```

这将以 `postgres` 用户的身份启动 PostgreSQL 服务。

  1. 检查 PostgreSQL 服务的状态:

```bash

systemctl status postgresql.service

```

确保服务现在处于 "active" 状态,并且没有错误。

如果你希望 PostgreSQL 服务在系统启动时自动启动,你可以使用以下命令启用服务:

```bash

systemctl enable postgresql.service

```

解除PID文件占用

是的,你的理解是正确的。如果之前运行的 PostgreSQL 实例状态为 "active (exited)",那么它已经处于停止状态,但是由于存在锁文件(`postmaster.pid`),因此无法重新启动新的 PostgreSQL 服务。在这种情况下,你需要执行以下操作:

  1. 停止已经运行的 PostgreSQL 实例("active (exited)"状态的实例)以释放锁文件。你可以使用以下命令来尝试停止它:

```bash

/data/pgsql/bin/pg_ctl stop -D /data/pgsql/dbdata -s -m fast

```

这将尝试快速停止 PostgreSQL 服务。如果服务已成功停止,你可以继续下一步。

  1. 如果上述步骤无法正常停止 PostgreSQL 服务,你可以手动杀死正在运行的 `postmaster` 进程。首先,查找并记下 `postmaster` 进程的 PID(在这种情况下是 PID 29613),然后使用 `kill` 命令停止它:

```bash

kill -TERM 29613

```

这将发送一个终止信号给进程,使其正常退出。如果没有正常退出,你可以尝试使用 `kill -KILL 29613` 强制终止它。

  1. 一旦确保没有正在运行的 PostgreSQL 服务,你可以再次尝试启动服务:

```bash

/data/pgsql/bin/pg_ctl start -D /data/pgsql/dbdata -s -w -t 270

```

如果一切正确,PostgreSQL 服务应该能够成功启动。

这些步骤应该解决了由于锁文件导致 PostgreSQL 无法启动的问题。如果你仍然遇到问题,请提供错误消息,以便我能够更进一步帮助你。

BUG Active: active (exited)

在SysV初始化脚本下,Active: active (exited) 表示服务已经成功启动,但它不会一直在后台运行,而是在完成启动操作后立即退出。这在SysV方式下是正常的行为,因为SysV脚本通常不会自动后台运行。

PgSQL集群部署

Service文件配成两个

  1. 第一个文件 `postgresql.service` 似乎是一个元单元(meta unit)用于管理系统上的所有 PostgreSQL 集群。这个单元本身不执行实际的操作,而是用于管理多个 PostgreSQL 集群的单元 `postgresql@.service` 的元单元。这个文件的内容包括了 `Description`、`ExecStart`、`ExecReload` 等字段,但它的 `ExecStart` 和 `ExecReload` 都设置为 `/bin/true`,这意味着它们不执行实际的操作。

  2. 第二个文件是一个模板文件,用于启动和管理 PostgreSQL 集群的单元。它以 `postgresql@%i` 的形式命名,其中 `%i` 是一个变量,表示 PostgreSQL 集群的名称(例如,`9.3-main`)。这个文件包括了 `Description`、`AssertPathExists`、`RequiresMountsFor` 等字段,它定义了如何启动、停止和重新加载 PostgreSQL 集群。

第二个文件是用于管理 PostgreSQL 集群的 systemd 服务单元文件,而第一个文件是元单元,用于管理所有 PostgreSQL 集群的统一状态。

要启动或停止特定的 PostgreSQL 集群,使用 `systemctl` 命令,并指定要操作的单元名称,例如:

  • 启动 PostgreSQL 集群:`sudo systemctl start postgresql@9.3-main`

  • 停止 PostgreSQL 集群:`sudo systemctl stop postgresql@9.3-main`

  • 重新加载 PostgreSQL 集群配置:`sudo systemctl reload postgresql@9.3-main`

  • 查看 PostgreSQL 集群状态:`sudo systemctl status postgresql@9.3-main`

请注意,将上述命令中的 `9.3-main` 替换为你实际使用的 PostgreSQL 集群名称。

相关推荐
尘浮生21 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
偶尔。53523 分钟前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚25 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel34 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
奥能电源1 小时前
移动充储机器人“小奥”的多场景应用(上)
阿里云·能源
JH30731 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介1 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人1 小时前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
武子康2 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
代码吐槽菌3 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm