ruby web 实战(10)-postgresql(1)

水宝石的技术博客 / 2023-07-28 / 原文

目录
  • user和install
  • start server

user和install

  1. 用户
  • 建议运行PostgreSQL在单独的用户帐户下。此用户帐户应仅拥有由服务器,不应与其他守护进程共享.

  • 特别是,建议该用户帐户不拥有PostgreSQL可执行文件,以确保受损的服务器进程无法修改这些可执行文件。

  • PostgreSQL的预打包版本通常会在软件包安装。

  • 要将Unix用户帐户添加到系统中,请查找命令useradd或adduser。通常默认是用户postgres这个名字,尤其是通过包安装的方式

  1. 安装
  • 从源码安装
./configure
make
su
make install
adduser postgres
mkdir -p /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile
start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
  • 安装诸如RPM或Debian包之类的预打包发行版
sudo dnf install postgresql-server
  1. 初始化

要手动初始化数据库集群,请运行initdb并指定所需的文件系统位置

带有-D选项的数据库集群,

root# mkdir /usr/local/pgsql
root# chown postgres /usr/local/pgsql
root# su postgres
postgres$ initdb -D /usr/local/pgsql/data

如果数据目录存在并且已经包含文件,initdb将拒绝运行;这是为了防止

意外覆盖现有安装。

由于数据目录包含数据库中存储的所有数据,因此必须确保其安全

防止未经授权的访问。initdb因此取消了除Post之外的所有人的访问权限-

greSQL用户,以及可选的组。组访问在启用时是只读的。这允许取消定价-

与群集所有者在同一组中的特权用户备份群集数据或执行其他操作

只需要读取访问的操作。

如果使用pg_ctl初始化服务器,这可能会更直观

pg_ctl -D /usr/local/pgsql/data initdb

一般来说,任何具有POSIX语义的文件系统都可以用于PostgreSQL。用户出于各种原因喜欢不同的文件系统,包括供应商支持、性能和熟悉程度。经验表明,在所有其他条件相同的情况下,不应仅仅通过切换文件系统或进行微小的文件系统配置更改来期望重大的性能或行为更改。

可以使用NFS文件系统来存储PostgreSQL数据目录。PostgreSQL对NFS文件系统没有做任何特殊的处理,这意味着它假设NFS的行为与本地连接的驱动器完全相同。PostgreSQL不使用任何已知在NFS上具有非标准行为的功能,例如文件锁定。

start server

在任何人都可以访问数据库之前,必须启动数据库服务器。数据库服务器程序称为postgres。

如果您使用的是预打包版本的PostgreSQL,那么它几乎可以肯定地包括根据操作系统的约定将服务器作为后台任务运行的规定。

手动启动服务器的基本方法就是直接调用postgres,使用-D选项的数据目录的位置,例如:
$ postgres -D /usr/local/pgsql/data