搜索仓库中的PostgreSQL,看看是什么版本。这一步不是必要的,可以跳过
[sean@archlinux ~]$ sudo pacman -Si postgresql
软件库 : extra
名字 : postgresql
版本 : 16.3-4
描述 : Sophisticated object-relational DBMS
架构 : x86_64
URL : https://www.postgresql.org/
软件许可 : PostgreSQL
组 : 无
提供 : 无
依赖于 : bash gcc-libs glibc icu krb5 libldap libxml2 libxslt llvm-libs lz4 openssl pam
readline systemd-libs util-linux-libs zlib zstd postgresql-libs>=16.3
可选依赖 : logrotate: rotates system logs automatically
perl: for PL/Perl support
postgresql-old-upgrade: upgrade from previous major version using pg_upgrade
python: for PL/Python 3 support
tcl: for PL/Tcl support
与它冲突 : 无
取代 : 无
下载大小 : 18.55 MiB
安装后大小 : 62.03 MiB
打包者 : Antonio Rojas <arojas@archlinux.org>
编译日期 : 2024年09月01日 星期日 18时53分11秒
验证者 : SHA-256 校验值 数字签名

开始正式安装
[sean@archlinux ~]$ sudo pacman -S postgresql
警告:postgresql-16.3-4 已经为最新 -- 重新安装
正在解析依赖关系...
正在查找软件包冲突...
软件包 (1) postgresql-16.3-4
全部安装大小: 62.03 MiB
净更新大小: 0.00 MiB
:: 进行安装吗? [Y/n] Y
(1/1) 正在检查密钥环里的密钥 [#######################################] 100%
(1/1) 正在检查软件包完整性 [#######################################] 100%
(1/1) 正在加载软件包文件 [#######################################] 100%
(1/1) 正在检查文件冲突 [#######################################] 100%
(1/1) 正在检查可用存储空间 [#######################################] 100%
:: 正在处理软件包的变化...
(1/1) 正在重新安装 postgresql [#######################################] 100%
"/var/lib/postgres/data" is missing or empty. Use a command like
su -l postgres -c "initdb --locale=C.UTF-8 --encoding=UTF8 -D '/var/lib/postgres/data'"
with relevant options, to initialize the database cluster.
:: 正在运行事务后钩子函数...
(1/4) Creating system user accounts...
(2/4) Reloading system manager configuration...
(3/4) Creating temporary files...
(4/4) Arming ConditionNeedsUpdate...

安装完成后,会在系统中自动建立名为 postgres 的用户。
![]()
设置密码启用改用户,可以用于一些PostgreSQL在命令行的操作,比如初始化数据库、创建数据库用户等等。
[sean@archlinux ~]$ sudo passwd postgres
新的密码:
重新输入新的密码:
passwd:已成功更新密码

密码修改完成后,su postgres 切换用户,初始化数据库。
[postgres@archlinux sean]$ initdb --locale zh_CN.UTF-8 -E UTF8 -D '/var/lib/postgres/data'
属于此数据库系统的文件宿主为用户 "postgres".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "zh_CN.UTF-8"进行初始化.
initdb: 无法为本地化语言环境"zh_CN.UTF-8"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"
禁止为数据页生成校验和.
修复已存在目录 /var/lib/postgres/data 的权限 ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......posix
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... UTC
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功
initdb: 警告: 为本地连接启用"trust"身份验证
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
成功。您现在可以用下面的命令开启数据库服务器:
pg_ctl -D /var/lib/postgres/data -l 日志文件 start

启动数据库的服务并添加开机自启动
[postgres@archlinux sean]$ systemctl start postgresql
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
启动“postgresql.service”需要认证。
Authenticating as: sean
Password:
==== AUTHENTICATION COMPLETE ====
[postgres@archlinux sean]$ systemctl enable postgresql
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ====
Authentication is required to manage system service or unit files.
Authenticating as: sean
Password:
==== AUTHENTICATION COMPLETE ====
Created symlink '/etc/systemd/system/multi-user.target.wants/postgresql.service' → '/usr/lib/systemd/system/postgresql.service'.
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ====
Authentication is required to reload the systemd state.
Authenticating as: sean
Password:
==== AUTHENTICATION COMPLETE ====

使用 createuser --interactive 命令启用交互式命令行来创建一个数据库的用户
[postgres@archlinux sean]$ createuser --interactive
输入要增加的角色名称: sean
新的角色是否是超级用户? (y/n) y
创建一个数据库
[postgres@archlinux sean]$ createdb myDemoDB
使用 psql 工具可以进入到数据库里面。
[postgres@archlinux sean]$ psql -d myDemoDB
psql (16.3)
输入 "help" 来获取帮助信息.
myDemoDB=# \du
角色列表
角色名称 | 属性
----------+--------------------------------------------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS
sean | 超级用户, 建立角色, 建立 DB
myDemoDB=#

开启远程连接
- 修改
pg_hba.conf下图表示的内容

- 修改
postgresql.conf下图表示的内容

或者直接用下面的命令
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" postgresql.conf
两个文件3项内容都修改完成后,就可以远程连接了。