FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 从入门到追忆(第三版:草稿)
  • 编辑日志
  • 目录
  • 致谢
  • 初版序言:好望角与塔吊
  • 再版序言:回到复制粘贴,面向教程本身
  • 三版序言:且有大觉而后知此其大梦也(草稿)
  • 前言
  • 第 1 章 FreeBSD 初见
    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD
    • 第 1.2 节 FreeBSD 简史
    • 第 1.3 节 谁在使用 FreeBSD?
    • 第 1.4 节 为什么要使用 FreeBSD?
    • 第 1.5 节 Linux 用户迁移指南
    • 第 1.6 节 FreeBSD 桌面发行版
  • 第 2 章 安装 FreeBSD
    • 第 2.1 节 安装前准备(新手入门版本)
    • 第 2.2 节 FreeBSD 安装图解(新手入门版本)
    • 第 2.3 节 UNIX 基础(新手入门版本)
    • 第 2.4 节 命令行基础(新手入门版本)
    • 第 2.5 节 安装 FreeBSD——基于 VMware Workstation Pro
    • 第 2.6 节 安装 FreeBSD——基于 Virtual Box
    • 第 2.7 节 手动安装双系统(先安装 FreeBSD)
    • 第 2.8 节 手动安装双系统(后安装 FreeBSD)
    • 第 2.9 节 安装 FreeBSD——基于 Apple M1 & Parallels Desktop 20
    • 第 2.10 节 安装 FreeBSD——基于 Apple M1 & VMware Fusion Pro
    • 第 2.11 节 Qemu 安装 RISC-V FreeBSD(基于 x86 Windows)
    • 第 2.12 节 云服务器安装 FreeBSD(基于腾讯云轻量云)
    • 第 2.13 节 安装 FreeBSD——基于 Hyper-V
  • 第 3 章 包管理器与 FreeBSD 系统更新
    • 第 3.1 节 FreeBSD 镜像站现状
    • 第 3.2 节 FreeBSD 换源方式
    • 第 3.3 节 gitup 的用法
    • 第 3.4 节 通过 pkg 包管理器安装二进制包
    • 第 3.5 节 通过 Ports 以源代码方式安装软件
    • 第 3.6 节 通过 DVD 安装软件
    • 第 3.7 节 通过 freebsd-update 更新 FreeBSD
    • 第 3.8 节 通过源代码更新 FreeBSD
    • 第 3.9 节 使用 pkgbase 更新 FreeBSD
  • 第 4 章 桌面环境
    • 第 4.1 节 显卡驱动(英特尔、AMD)
    • 第 4.2 节 显卡驱动(NVIDIA)
    • 第 4.3 节 GNOME
    • 第 4.4 节 Mate
    • 第 4.5 节 Xfce
    • 第 4.6 节 Cinnamon
    • 第 4.7 节 Lumina
    • 第 4.8 节 LXQt
    • 第 4.9 节 bspwm
    • 第 4.10 节 IceWM
    • 第 4.11 节 Budgie
    • 第 4.12 节 i3wm
    • 第 4.13 节 CDE
    • 第 4.14 节 Hyprland
    • 第 4.15 节 LXDE
    • 第 4.16 节 Window Maker
    • 第 4.17 节 Fluxbox
    • 第 4.18 节 KDE6
    • 第 4.19 节 主题美化
    • 第 4.20 节 远程桌面
    • 第 4.21 节 root 登录桌面
  • 第 5 章 中文环境配置
    • 第 5.1 节 本地化环境变量
    • 第 5.2 节 Fcitx 输入法框架
    • 第 5.3 节 IBus 输入法框架
    • 第 5.4 节 五笔输入法
    • 第 5.5 节 Firefox 与 Chromium
    • 第 5.6 节 QQ(Linux 版)
    • 第 5.7 节 更换字体
    • 第 5.8 节 金山 WPS(Linux 版)
    • 第 5.9 节 压缩与解压
    • 第 5.10 节 微信(Linux 版)
  • 第 6 章 多媒体与外设
    • 第 6.1 节 声卡
    • 第 6.2 节 蓝牙
    • 第 6.3 节 打印机
    • 第 6.4 节 触摸板
    • 第 6.5 节 音频播放器
    • 第 6.6 节 视频播放器
    • 第 6.7 节 音频图形图像处理
  • 第 7 章 代理服务器
    • 第 7.1 节 HTTP 代理
    • 第 7.2 节 V2ray
    • 第 7.3 节 Mihomo(原 Clash)
    • 第 7.4 节 OpenVPN
  • 第 8 章 账户与权限
    • 第 8.1 节 sudo 与 doas
    • 第 8.2 节 用户与组
    • 第 8.3 节 用户权限
  • 第 9 章 Jail
    • 第 9.1 节 Jail 配置
    • 第 9.2 节 Jail 更新
    • 第 9.3 节 使用 Qjail 管理 Jail
  • 第 10 章 虚拟化
    • 第 10.1 节 通过 BVCP 以网页管理 BHyve
    • 第 10.2 节 使用 bhyve 安装 Windows 11(vm-bhyve)
  • 第 11 章 计算机概论
    • 第 11.1 节 存储卡参数简介与测试
    • 第 11.2 节 总线接口与协议
    • 第 11.3 节 网络基础
    • 第 11.4 节 操作系统
    • 第 11.5 节 MySQL 数据库
  • 第 12 章 引导恢复与 TTY 配置
    • 第 12.1 节 单用户模式与密码重置
    • 第 12.2 节 配置 rEFInd(双系统用)
    • 第 12.3 节 FreeBSD 中文 TTY 控制台
    • 第 12.4 节 引导界面与控制台界面
    • 第 12.5 节 Grub & UEFI 与 efibootmgr
  • 第 13 章 FreeBSD 系统管理
    • 第 13.1 节 FreeBSD src 源码概览
    • 第 13.2 节 FreeBSD 系统概览
    • 第 13.3 节 bsdconfig 系统配置工具
    • 第 13.4 节 SSH 配置与相关工具
    • 第 13.5 节 BSD init 管理服务
    • 第 13.6 节 利用脚本自动生成 BSDlibc 库文本
  • 第 14 章 网络管理
    • 第 14.1 节 TCP 堆栈
    • 第 14.2 节 WiFi
    • 第 14.3 节 USB 网络共享(USB tethering)
    • 第 14.4 节 USB 网卡 & 以太网卡
  • 第 15 章 FreeBSD 防火墙
    • 第 15.1 节 网络参数配置命令
    • 第 15.2 节 Packet Filter(PF)
    • 第 15.3 节 IPFilter(IPF)
    • 第 15.4 节 ipfirewall(IPFW)
    • 第 15.5 节 Fail2Ban(基于 IPFW、PF、IPF)
  • 第 16 章 服务器
    • 第 16.1 节 FTP 服务器
    • 第 16.2 节 MinIO 对象存储服务
    • 第 16.3 节 Gitlab-EE
    • 第 16.4 节 时间服务
    • 第 16.5 节 WildFly
    • 第 16.6 节 Rsync 同步服务
    • 第 16.7 节 Samba 服务器
    • 第 16.8 节 NFS 服务器
    • 第 16.9 节 Webmin
  • 第 17 章 网络服务器
    • 第 17.1 节 Apache
    • 第 17.2 节 Nginx
    • 第 17.3 节 PHP 8.X
    • 第 17.4 节 MySQL 5.X
    • 第 17.5 节 MySQL 8.X
    • 第 17.6 节 NextCloud——基于 PostgreSQL
    • 第 17.7 节 Telegraf+InfluxDB+Grafana 监控平台
    • 第 17.8 节 PostgreSQL 与 pgAdmin4
    • 第 17.9 节 AList
    • 第 17.10 节 prometheus 监控部署
    • 第 17.11 节 MongoDB 80
    • 第 17.12 节 Tomcat
    • 第 17.13 节 Caddy
    • 第 17.14 节 OnlyOffice(基于 PostgreSQL)
    • 第 17.15 节 Zabbix 监控(基于 PostgreSQL)
  • 第 18 章 嵌入式(树莓派、RISCV)
    • 第 18.1 节 树莓派简介与配件选用
    • 第 18.2 节 树莓派安装 FreeBSD
    • 第 18.3 节 树莓派 FreeBSD 配置
    • 第 18.4 节 树莓派与 Linux 兼容层
    • 第 18.5 节 树莓派与 OpenBSD
    • 第 18.6 节 在 RISCV 开发板上安装 OpenBSD
    • 第 18.7 节 Radxa X4(x86)
  • 第 19 章 文学故事
    • 第 19.1 节 BSD 与哲学家 George Berkeley(乔治·贝克莱)
    • 第 19.2 节 加州大学伯克利分校与“Fiat Lux”(要有光)
  • 第 20 章 游戏与科学
    • 第 20.1 节 游戏
    • 第 20.5 节 科研与专业工具
    • 第 20.6 节 我的世界(Minecraft)
  • 第 21 章 Linux 兼容层
    • 第 21.1 节 Linux 兼容层实现
    • 第 21.2 节 Linux 兼容层——基于 CentOS(FreeBSD Port)
    • 第 21.3 节 Linux 兼容层——基于 Ubuntu/Debian
    • 第 21.4 节 Linux 兼容层——基于 ArchLinux bootstrap
    • 第 21.5 节 Linux 兼容层——基于 archlinux-pacman
    • 第 21.6 节 Linux 兼容层——基于 OpenSUSE
    • 第 21.7 节 Linux 兼容层——基于 Gentoo Linux
    • 第 21.8 节 Linux 兼容层——基于 Rocky Linux
    • 第 21.9 节 Linux 兼容层——基于 Slackware Linux
    • 第 21.10 节 RockyLinux 兼容层(FreeBSD Port)
    • 第 21.11 节 Linux 兼容层——基于 Deepin
    • 第 21.12 节 Linux 兼容层与 Jail
    • 第 21.13 节 Linux 兼容层故障排除与未竟事宜
  • 第 22 章 编程环境与软件开发
    • 第 22.1 节 如何报告 Bug
    • 第 22.2 节 如何开发一个 Port
    • 第 22.3 节 如何参与 FreeBSD 开发
    • 第 22.4 节 C/C++ 环境的配置
    • 第 22.5 节 Java 环境的配置
    • 第 22.6 节 QT 环境的配置
    • 第 22.7 节 Python 与 VS Code
    • 第 22.8 节 Rust/Go 环境的配置
    • 第 22.9 节 Shell
    • 第 22.10 节 通过 IDA 7 调试 FreeBSD
    • 第 22.11 节 如何订阅 FreeBSD 的邮件列表
    • 第 22.12 节 code-server 和 clangd
    • 第 22.13 节 Node.js
  • 第 23 章 文件系统与磁盘管理
    • 第 23.1 节 自动挂载文件系统
    • 第 23.2 节 ZFS
    • 第 23.3 节 磁盘扩容
    • 第 23.4 节 NTFS & Fat32
    • 第 23.5 节 Swap 交换分区的设置
    • 第 23.6 节 Linux 文件系统
    • 第 23.7 节 ZFS 磁盘加解密
  • 第 24 章 DragonFly BSD
    • 第 24.1 节 DragonFly BSD 概述
    • 第 24.2 节 安装 DragonFly BSD
    • 第 24.3 节 配置 DragonFly BSD
  • 第 25 章 TwinCAT/BSD
    • 第 25.1 节 TwinCAT/BSD 系统安装与基本配置
    • 第 25.2 节 TwinCAT/BSD 开发环境配置
  • 第 26 章 OpenBSD
    • 第 26.1 节 OpenBSD 概述
    • 第 26.2 节 安装 OpenBSD
    • 第 26.3 节 配置 OpenBSD
    • 第 26.4 节 OpenBSD 包管理器
    • 第 26.5 节 桌面与其他软件
  • 第 27 章 NetBSD
    • 第 27.1 节 NetBSD 概述
    • 第 27.2 节 NetBSD 安装图解
    • 第 27.3 节 NetBSD 换源与包管理器
    • 第 27.4 节 桌面与中文环境常用软件
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • PostgreSQL 安装示例(6 个版本均如此)
  • 安装
  • 加入启动项
  • 初始化数据库
  • 登录使用
  • 深入 PostgreSQL 服务管理
  • 初始化建议
  • 管理多个数据库实例(集簇)
  • 安装 pgAdmin4
  • 安装 Python 及 pip
  • 安装配置 virtualenv
  • 安装 sqlite3
  • 安装 pgAdmin4
  • 配置并运行 pgAdmin4
  • 保持 pgAdmin4 后台运行
  • 升级 pgAdmin4
在GitHub上编辑
导出为 PDF
  1. 第 17 章 网络服务器

第 17.8 节 PostgreSQL 与 pgAdmin4

上一页第 17.7 节 Telegraf+InfluxDB+Grafana 监控平台下一页第 17.9 节 AList

最后更新于17天前

PostgreSQL 是一款自由的对象关系型数据库(Object-Relational Database,ORDB)。PostgreSQL 最早发布于 1989 年 6 月。在 FreeBSD 上,有多个版本可选。在吞吐量、源代码清晰度、平均耗时等多方面均优于 MySQL。

值得一提的是,PostgreSQL 也渊源于加州大学伯克利分校。PostgreSQL 的许可证是 ,与 BSDL 类似。

PostgreSQL 安装示例(6 个版本均如此)

安装

# pkg install -y postgresql16-server

或者

# cd /usr/ports/databases/postgresql16-server/ 
# make install clean

查看安装后配置

For procedural languages and postgresql functions, please note that
you might have to update them when updating the server.
# 如果你使用了过程语言或 PostgreSQL 函数,更新服务器时可能也需要同步更新它们。

If you have many tables and many clients running, consider raising
kern.maxfiles using sysctl(8), or reconfigure your kernel
appropriately.
# 如果你有大量表和客户端,建议使用 sysctl 提升 kern.maxfiles,或者重新配置内核参数。

The port is set up to use autovacuum for new databases, but you might
also want to vacuum and perhaps backup your database regularly. There
is a periodic script, /usr/local/etc/periodic/daily/502.pgsql, that
you may find useful. You can use it to backup and perform vacuum on all
databases nightly. Per default, it performs `vacuum analyze'. See the
script for instructions. For autovacuum settings, please review
~postgres/data/postgresql.conf.
# 端口默认对新数据库启用了 autovacuum,但你仍然应该定期手动 vacuum 和备份。
# 有一个每日脚本 /usr/local/etc/periodic/daily/502.pgsql 可以用来每晚备份和 vacuum 所有数据库。
# 默认执行 `vacuum analyze`,具体可查阅脚本。autovacuum 的设置请查看 postgresql.conf。

If you plan to access your PostgreSQL server using ODBC, please
consider running the SQL script /usr/local/share/postgresql/odbc.sql
to get the functions required for ODBC compliance.
# 若你打算通过 ODBC 访问 PostgreSQL,请运行 odbc.sql 脚本以安装所需的兼容函数。

Please note that if you use the rc script,
/usr/local/etc/rc.d/postgresql, to initialize the database, unicode
(UTF-8) will be used to store character data by default.  Set
postgresql_initdb_flags or use login.conf settings described below to
alter this behaviour. See the start rc script for more info.
# 如果你用 rc 脚本初始化数据库,会默认使用 UTF-8 编码存储字符数据。
# 你可以通过设置 postgresql_initdb_flags 或 login.conf 来改变这个行为,详见 rc 脚本说明。

To set limits, environment stuff like locale and collation and other
things, you can set up a class in /etc/login.conf before initializing
the database. Add something similar to this to /etc/login.conf:
# 如果你需要设置资源限制、语言环境、排序规则等初始化参数,可以预先在 /etc/login.conf 里定义一个登录类。
Add something similar to this to /etc/login.conf:
---
postgres:\
	:lang=en_US.UTF-8:\
	:setenv=LC_COLLATE=C:\
	:tc=default:
---
# 示例登录类设置,定义了语言和排序规则。

and run `cap_mkdb /etc/login.conf'.
Then add 'postgresql_login_class="postgres"' to /etc/rc.conf, or
set it as the postgres user's login class in /etc/passwd.
# 添加完登录类后运行 cap_mkdb 生效,并在 /etc/rc.conf 设置 postgresql_login_class。
# 或者直接在 /etc/passwd 中为 postgres 用户指定此登录类。

======================================================================

To use PostgreSQL, enable it in rc.conf using

  sysrc postgresql_enable=yes
# 启用 PostgreSQL 服务。

To initialize the database, run

  service postgresql initdb
# 初始化数据库。

You can then start PostgreSQL by running:

  service postgresql start
# 启动 PostgreSQL 服务。

For postmaster settings, see ~postgres/data/postgresql.conf
# postmaster 设置在 postgresql.conf 中。

NB. FreeBSD's PostgreSQL port logs to syslog by default
    See ~postgres/data/postgresql.conf for more info
# PostgreSQL 在 FreeBSD 上默认通过 syslog 记录日志,详见 postgresql.conf。

NB. If you're not using a checksumming filesystem like ZFS, you might
    wish to enable data checksumming. It can be enabled during
    the initdb phase, by adding the "--data-checksums" flag to
    the postgresql_initdb_flags rcvar. Otherwise you can enable it later by
    using pg_checksums.  Check the initdb(1) manpage for more info
    and make sure you understand the performance implications.
# 如果你不使用像 ZFS 这样的具备校验和的文件系统,建议开启 PostgreSQL 的数据校验功能。
# 你可以在 initdb 阶段用 --data-checksums 启用,或之后用 pg_checksums 工具开启。
# 请参考 initdb 手册并理解它可能带来的性能影响。

======================================================================

SECURITY ADVICE
# 安全建议

If upgrading from a version 16.x < 16.3
A security vulnerability was found in the system views pg_stats_ext
and pg_stats_ext_exprs, potentially allowing authenticated database
users to see data they shouldn't.  If this is of concern in your
installation, run the SQL script /usr/local/share/postgresql/fix-CVE-2024-4317.sql
for each of your databases. For details, see
https://www.postgresql.org/support/security/CVE-2024-4317/
# 如果你从 16.3 以下版本升级,pg_stats_ext 和 pg_stats_ext_exprs 有安全漏洞,可能导致认证用户看到不该看的数据。
# 若你关心此问题,请对每个数据库执行 fix-CVE-2024-4317.sql。
# 详情见官方公告:https://www.postgresql.org/support/security/CVE-2024-4317/

加入启动项

# service postgresql enable

初始化数据库

# service postgresql initdb

示例输出:

root@ykla:~ # service postgresql initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with this locale configuration:
  provider:    libc
  LC_COLLATE:  C
  LC_CTYPE:    C.UTF-8
  LC_MESSAGES: C.UTF-8
  LC_MONETARY: C.UTF-8
  LC_NUMERIC:  C.UTF-8
  LC_TIME:     C.UTF-8
The default text search configuration will be set to "english".

Data page checksums are disabled.

creating directory /var/db/postgres/data16 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... PRC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
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.

Success. You can now start the database server using:

    /usr/local/bin/pg_ctl -D /var/db/postgres/data16 -l logfile start

登录使用

Postgresql 默认是没有 root 用户的,需要使用其创建的用户 postgres 登录。

示例输出:

root@ykla:~ # psql
psql: FATAL:  role "root" does not exist

正确用法:

#切换用户
root@ykla:~ # su - postgres

#启动服务
$ /usr/local/bin/pg_ctl -D /var/db/postgres/data16 -l logfile start

#创建新用户 ykla,并设置密码
$ createuser -sdrP ykla
Enter password for new role:
Enter it again:
$
#创建数据库
$ createdb new_db
#登录进数据库并将数据库权限赋予用户 ykla。
$ psql
psql (16.7)
Type "help" for help.

postgres=# ALTER USER ykla WITH ENCRYPTED PASSWORD 'password';
ALTER ROLE
postgres=#
postgres=# GRANT ALL PRIVILEGES ON DATABASE new_db TO ykla;
GRANT
#退出数据库
postgres=# q
$exit
root@ykla:~ #

深入 PostgreSQL 服务管理

初始化建议

初始化数据库建议是使用 service postgresql initdb,这是最简便的方式。但是里面还是有一些技巧可用。

这里讲如何使用 postgresql_initdb_flags rc 脚本参数。

postgresql_initdb_flags 参数默认是"--encoding=utf-8 --lc-collate=C"。意义一目了然:指定编码为 UTF-8,排序规则为 ASCII 编码。

建议用 sysrc 设置如下:

# sysrc postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C -A scram-sha-256 -W"

解释:

  • -A scram-sha-256 用于指定默认的认证方法。否则 pg_hba.conf 中默认认证方法为 trust,即无密码登录;

  • -W 用于在初始化时要求设置 postgres 用户密码,这样不用登录后再设置密码。

这样可以简化一些初始化工作。同样也可以利用 postgresql_initdb_flags 参数灵活控制初始化工作。

管理多个数据库实例(集簇)

PostgreSQL 能在一台机器上运行多个实例,这在测试不同配置,隔离环境时非常有用。

管理多个数据库实例的工具在 Debian/Ubuntu 系统上常用的是 pg_ctlcluster,即是对 pg_ctl 的封装。

FreeBSD 上并没有这个工具,但 FreeBSD 上 PostgreSQL 的 rc 脚本封装了这些管理功能,使用起来也很方便。

下面将建立两个命名实例,分别为:main、dev。

配置实例

# 增加一个 main 实例
# sysrc postgresql_profiles+=main  

# 增加一个 dev 实例  
# sysrc postgresql_profiles+=dev  

# 当然可以直接一次设置多个实例  
# sysrc postgresql_profiles="main dev"  

# 对应 main 实例数据目录②
# sysrc postgresql_main_data=/var/db/postgres/main  

# 对应 dev 实例数据目录③ 
# sysrc postgresql_dev_data=/var/db/postgres/dev  

# 必须为每个实例设置数据目录  
# (见上两条)  

# 为 main 实例设置初始化参数①
# dev 实例默认初始化,作一对比  
# sysrc postgresql_main_initdb_flags="-E utf-8 -A scram-sha-256 --lc-collate C -W"  

# 为每个实例设置启用或关闭  
# sysrc postgresql_main_enable=YES  
# sysrc postgresql_dev_enable=YES  

说明:

  • ① 把实例名放入 rc 参数名中,就是对应实例的参数名。

  • ② postgresql_data、postgresql_enable 等参数还是可以使用。这时这些参数作为实例对应参数的默认值使用,在找不到实例参数时使用。但当你显式配置了实例参数后,就不会使用默认参数了。

  • ③ 在管理多个实例时,建议只使用实例名相关的参数,不去使用没有实例名的参数。好处是清晰明确,控制上也灵活,不同实例可以有不同设置。

初始化实例目录

# service postgresql initdb

这会初始化两个数据库实例。

也可以在命令最后指定实例名分别进行初始化,在新增实例时使用这种方法:

# service postgresql initdb main
# service postgresql initdb dev

注意:

两个不同的实例必须运行在不同的端口上,所以需要修改对应实例的端口号。

这里 main 实例使用默认的 5432 端口,不作修改;dev 实例使用 5433 端口,修改对应配置文件

修改 /var/db/postgres/dev/postgresql.conf。找到 port 行,修改如下:

port = 5433

启动停止和重启

# service postgresql start
# service postgresql status
# service postgresql restart
# service postgresql stop

以上针对所有实例进行。操作示例如下:

# service postgresql start # 启动服务
===> postgresql profile: main 
start postgresql
===> postgresql profile: dev
start postgresql
# service postgresql status # 查看状态
===> postgresql profile: main
status postgresql
pg_ctl: server is running (PID: 2624)
/s/usr/local/bin/postgres "-D" "/var/db/postgres/main"
===> postgresql profile: dev
status postgresql
pg_ctl: server is running (PID: 2641)
/s/usr/local/bin/postgres "-D" "/var/db/postgres/dev"
# service postgresql restart # 重启服务
===> postgresql profile: main
restart postgresql
===> postgresql profile: dev
restart postgresql
# service postgresql status # 查看状态
===> postgresql profile: main
status postgresql
pg_ctl: server is running (PID: 2685)
/s/usr/local/bin/postgres "-D" "/var/db/postgres/main"
===> postgresql profile: dev
status postgresql
pg_ctl: server is running (PID: 2701)
/s/usr/local/bin/postgres "-D" "/var/db/postgres/dev"
# service postgresql stop # 停止服务
===> postgresql profile: main
stop postgresql
===> postgresql profile: dev
stop postgresql
# service postgresql status # 查看状态
===> postgresql profile: main
status postgresql
pg_ctl: no server running
===> postgresql profile: dev
status postgresql
pg_ctl: no server running

可以指定实例名单独操作:

# service postgresql start dev
# service postgresql restart dev
# service postgresql status dev
# service postgresql stop dev

输出示例如下:

# service postgresql start dev
start postgresql
# service postgresql status dev
status postgresql
pg_ctl: server is running (PID: 2807)
/s/usr/local/bin/postgres "-D" "/var/db/postgres/dev"
# service postgresql restart dev
restart postgresql
# service postgresql stop dev
stop postgresql

安装 pgAdmin4

以下教程基于 FreeBSD 13.0。

pgAdmin4 是用于管理 PostgreSQL 数据库服务器的最流行的开源应用程序。pgAdmin4 提供功能丰富的图形用户界面,轻松管理数据库。它是用 Python 和 Javascript / jQuery 编写的。它可以在多种环境中使用,如 Linux,Windows,Unix,可在桌面和服务器模式下使用。

注意

在安装 pgAdmin4 前,请先行安装 PostgreSQL 数据库,否则 pgAdmin4 会安装失败。

pgAdmin4 需要在 python 环境下运行,并且安装时要通过 python 的 pip 进行安装,所以先安装 python。本文用的默认版本是 Python3.8,请注意,FreeBSD 13 系统上默认没有 python 环境。可通过以下命令查看:

# python
python: Command not found   # 说明当前未安装 python 环境

安装 Python 及 pip

# pkg install python

pip 是 Python 包的包管理器。它用于安装和管理 Python 包和依赖包的关系。

virtualenv 用来建立一个虚拟的 python 环境,一个专属于项目的 python 环境。

本文实际安装过程中是通过 virtualenv 创建独立的 Python 环境来安装 pgAdmin4。

从 py38-pip 包安装 pip:

# pkg install py38-pip

安装配置 virtualenv

使用 virtualenv 创建独立的 Python 环境。Virtualenv 会创建一个自己的 Python 安装的环境,它不支持具有全局或另一个虚拟环境的库。运行以下命令来安装 Virtualenv。

# pkg install py38-virtualenv #(本次安装 python 版本是 3.8 故使用 py38)

通过运行以下命令为 pgAdmin4 创建虚拟环境

# virtualenv-3.8 pgadmin4

如果创建完成则有如下显示,在 root 用户的根目录下生成了一个名为 pgadmin4 的虚拟环境。

Using base prefix '/usr/local'
New python executable in /home/vagrant/pgadmin4/bin/python3.8
Also creating executable in /home/vagrant/pgadmin4/bin/python
Installing setuptools, pip, wheel…done.
done.

安装 sqlite3

#pkg install py38-sqlite3

激活创建的虚拟环境。

#source pgadmin4/bin/activate.csh

你会看到 shell 已经变为(pgadmin4)(以下操作均在该 shell 下进行)

实例如下:

(pgadmin4) root@ykla:~ #

安装 pgAdmin4

现在 pip 源一律要求使用 https,由于缺少 SSL 证书还需要安装。

(pgadmin4) root@ykla:~# pkg install ca_root_nss

然后对 pip 进行换源,此处使用清华源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

其中有依赖 openjpeg,先进行安装

(pgadmin4) root@ykla:~# pkg install openjpeg

如果报错:

WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1136)'))': /simple/pgadmin4/

是由于时间不正确引发的,先同步时间:

ntpdate ntp.api.bz
(pgadmin4) root@ykla:~#  ntpdate ntp.api.bz
17 Dec 16:35:36 ntpdate[1453]: step time server 114.118.7.161 offset +401965.911037 sec

然后再安装 pgAmdin4 及其依赖环境 rust:

(pgadmin4) root@ykla:~# pkg install rust
(pgadmin4) root@ykla:~# pip install pgadmin4

注意

如果内存不足(小于 4GB)且没有 swap,会提示 killed,如出现该问题请先添加交换空间(swap)。

配置并运行 pgAdmin4

安装完成后为 pgAdmin4 创建配置文件,复制 pgAdmin4 配置文件:

(pgadmin4) root@ykla:~# cp ./pgadmin4/lib/python3.8/site-packages/pgadmin4/config.py  ./pgadmin4/lib/python3.8/site-packages/pgadmin4/config_local.py

使用 ee 编辑器编辑配置文件的本地副本。

(pgadmin4) root@ykla:~# ee ./pgadmin4/lib/python3.8/site-packages/pgadmin4/config_local.py

找到 DEFAULT_SERVER 将默认服务器侦听地址更改为 0.0.0.0。找到 DEFAULT_SERVER_PORT 可改应用程序监听的端口。

实例如下:

DEFAULT_SERVER = '0.0.0.0'
DEFAULT_SERVER_PORT = 5050

手动创建软件目录:

(pgadmin4) root@ykla:~# mkdir  -p /var/lib/pgadmin
(pgadmin4) root@ykla:~# mkdir /var/log/pgadmin

配置文件编辑完成后执行以下命令来初始化账号和登录密码。

(pgadmin4) root@ykla:~# pgadmin4

显示实例如下:

NOTE: Configuring authentication for SERVER mode.
Enter the email address and password to use for the initial pgAdmin user account:
Email address: your_email		# 输入你的邮件地址
Password: your_new_password		# 输入你的登录密码
Retype password:				# 再次输入密码
Starting pgAdmin 4. Please navigate to http://0.0.0.0:5050 in your browser.

现在我们已经安装并运行了 pgAdmin4,并可以通过 http://ip:5050 访问 Web 控制面板:

保持 pgAdmin4 后台运行

如果服务关闭下次要运行时需使用 pgadmin4 的安装用户(此处是 root)进入根目录,执行如下命令:

root@ykla:~# source pgadmin4/bin/activate.csh
(pgadmin4) root@ykla:~# pgadmin4 &

提示:& 表示后台运行

服务启动后在当前界面中输入 & 按回车键,可切换至前台命令行,让服务程序在后台运行。

升级 pgAdmin4

本文测试如果直接使用 pip 升级后还是提示旧版本。

pgadmin4 更新频率较高,如需升级要先删除原有用 virtualenv 创建的 pgadmin4 目录然后用安装用户再次执行如下指令:

root@ykla:~# virtualenv-3.8 pgadmin4

虚拟目录创建完成后激活

root@ykla:~# source pgadmin4/bin/activate.csh

激活后不要开启服务,直接执行升级

(pgadmin4) root@ykla:~# pip install --upgrade pgadmin4

完成升级后启动服务

(pgadmin4) root@ykla:~# pgadmin4

登录账户和密码还是原来的 (登录后再无更新提示,查看版本已是为最新)。

PostgreSQL 许可证