开始学习PostgreSQL:安装和初始化步骤

发表时间: 2024-03-07 23:49

安装

yum install postgresql

yum install postgresql-server

初始化:

方法1:`
/usr/bin/postgresql-12-setup initdb`

  • -这是一个在特定于发行版的 PostgreSQL 包中提供的脚本,用于初始化数据库
  • 它简化了初始化过程,因为它会自动设置一些默认参数,如数据目录和认证设置。
  • 该脚本通常用于基于 RPM 的 Linux 发行版(如 CentOS、Fedora、RHEL 等)。
  • 使用这个脚本,用户不需要直接指定很多初始化参数,因为脚本已经为你设置了合理的默认值。
  • 运行这个命令后,它实际上会在背后调用 `initdb` 命令来完成实际的初始化工作。

方法2: `/usr/pgsql-12/bin/initdb --locale=en_US.UTF-8 -E UTF8 -D /var/lib/pgsql/12/data/`

  • 这个命令直接调用 PostgreSQL 自带的 `initdb` 工具来初始化数据库。
  • 你可以通过这个命令手动指定各种初始化参数,比如数据编码 (`-E UTF8`), 数据库默认的语言和地区设置 (`--locale=en_US.UTF-8`), 以及数据文件存储的位置 (`-D /var/lib/pgsql/12/data/`)。
  • 这种方式提供了更多的灵活性,允许用户根据自己的需求定制数据库的初始化设置。
  • 这个命令在各种操作系统和环境中都可以使用,不依赖于特定发行版的脚本。

区别:

如果你在一个支持 `
/usr/bin/postgresql-12-setup initdb` 脚本的环境中,且对初始化过程的默认设置感到满意,使用这个脚本会更简单、更方便。

如果你需要更细致地控制初始化过程的各个方面,或者你使用的环境没有提供特定的初始化脚本,那么直接使用 `initdb` 命令会是更好的选择。

两者的最终结果是相同的——创建一个新的 PostgreSQL 数据库集群。

查看数据编码:

  • postgresql.conf

默认的数据编码和地区设置可能在 PostgreSQL 的配置文件 `postgresql.conf` 中有所体现。你可以查找该文件中的相关设置,如 `lc_collate`(用于字符串排序的地区设置)、`lc_ctype`(用于字符分类和大小写转换的地区设置)等。

  • 使用 SQL 命令

连接到 PostgreSQL 数据库后,你可以执行以下 SQL 命令来查看当前数据库的编码和地区设置:

```sql

SHOW SERVER_ENCODING;

SHOW LC_COLLATE;

SHOW LC_CTYPE;

```

这些命令会显示数据库服务器当前使用的字符编码以及地区相关的配置。

错误:

initdb: error: directory "/var/lib/pgsql/12/data" exists but is not empty

If you want to create a new database system, either remove or empty

the directory "/var/lib/pgsql/12/data" or run initdb

with an argument other than "/var/lib/pgsql/12/data".

这个错误消息表明你尝试在一个已经存在并且不为空的目录 `/var/lib/pgsql/12/data` 中初始化一个新的 PostgreSQL 数据库集群。PostgreSQL 的 `initdb` 命令要求指定的数据目录必须是空的,以防止不小心覆盖已有的数据或者造成数据混乱。

要解决这个问题,你有几个选项:

  • 如果目录中没有重要数据

使用下面的命令来清空目录(请谨慎使用,确保不会删除重要数据):

```bash

sudo rm -rf /var/lib/pgsql/12/data/*

```

之后,你可以重新运行 `initdb` 命令。

  • 如果目录中有重要数据

你可以选择以下任一操作:

- **备份数据**:确保对目录中的所有文件进行备份,然后清空目录,再次运行 `initdb`。

- **使用不同的数据目录**:选择或创建另一个目录来初始化新的数据库集群。运行 `initdb` 时指定新的目录路径:

```bash

/usr/pgsql-12/bin/initdb --locale=en_US.UTF-8 -E UTF8 -D /path/to/new/data/directory

```

确保替换 `
/path/to/new/data/directory` 为你的新目录路径。

  • 检查是否已有运行的 PostgreSQL 实例

如果你尝试初始化的目的是恢复或迁移数据,确保没有 PostgreSQL 的实例已经在使用 `/var/lib/pgsql/12/data` 目录。如果有,你可能需要停止该服务或配置服务使用不同的数据目录,以避免冲突。

在进行任何更改之前,请确保你了解这些操作的后果,并且已经采取了适当的数据备份措施。