Pigsty 快速上手 PG


如何学习 PG?

有许多人都问过老冯这个问题,我应该如何学习 PostgreSQL?从哪里上手? 老冯认为,学习 PostgreSQL 的最好方式就是 Learn by doing —— 通过实践来学习,而不是通过死看书 / PPT。

那么,什么样的实践才是最适合上手 PostgreSQL 的呢?实话说直到今天, 老冯依然没看到一个让我觉得做的好的教程,这也是老冯写这本教程的原因 —— 我想给初学者提供一个符合直觉,符合认知习惯的上手学习教程。

老冯的建议是,你先不要去急着看什么 PG 文档和书,先拉起真实一套生产环境中的单机 PostgreSQL, 观察它,使用它,用它解决一个小而美的具体实战问题,这比吭哧吭哧傻看多少书都要有用。

这就是 Pigsty 能够发挥作用的地方,这是老冯编写的一套开源 PostgreSQL RDS 方案,在北欧风格的创业公司 —— 探探中管理了 25000 核 vCPU 的数据库。 但它竟然也能完整运行在一台 1C1G 的虚拟机上!所以,我们有许多的研发同事也使用它作为自己的开发沙箱 —— 开发环境,测试环境,生产环境全部统一使用一套方案, 带有 PostgreSQL,完整的监控系统, Linux 配置调优,几百个扩展插件,帮你配置好的 Nginx 和 Docker 环境,可选的 MinIO 对象存储,Redis,等等等等……

听上去很复杂对吧?但老冯得意的一点就是,除了打两行字儿,你不需要什么其他的知识就能把它跑起来 —— 甚至都不需要用到 Docker,让我们来看看 Pigsty 是如何在光屁股的 Linux 裸机上做到这一点的:

快速上手

聊了这么多前戏,现在你的手头应该有一个 Linux VPS 了吧?如果没有,可以参考 这个教程

ssh 登陆上你的服务器,然后执行以下命令:

curl https://repo.pigsty.cc/get | bash -s v3.6.1; cd ~/pigsty
./configure
./install.yml

嘿,大概几分钟后,你就有了一个开箱即用的 PostgreSQL 开发沙箱了!让我们来看看这个箱子里到底有什么?

完整安装教程: https://doc.pgsty.com/zh/install/start

安装视频:https://asciinema.org/a/731199

哇!真的有好多东西啊!但别的先仍一边,最核心的东西就是这个 PostgreSQL 数据库了!它默认监听本地的 5432 端口。

访问数据库

现在,让我们来试一下,退出你的 ssh 连接重新登陆上来,敲一个 p,神奇的事情就发生了!你通过 PostgreSQL 自带的命令行工具 psql 连接上了数据库!

root@s879132:~# p
psql (17.6 (Ubuntu 17.6-1.pgdg24.04+1))
Type "help" for help.

# 现在你可以输入 SQL 语句了!
postgres=#

让我们执行一条 SQL:

postgres=# SELECT version(); 

                                                              version
-----------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.6 (Ubuntu 17.6-1.pgdg24.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit

如果输出结果太长,psql 会使用分页器显示,你可以使用 q 键退出分页器。

按下 Ctrl + C 可以中断当前的查询,再按下 Ctrl + D 退出 psql 命令行工具。

当然,如果你不熟悉命令行工具,也许会感到陌生与害怕,没关系,我们可以先用一个 图形化的客户端工具 来操作数据库。 并且在第二章介绍几个核心命令行工具的基础使用方法。

数据库连接串

你是如何连接上数据库的呢?其实不论是 PG 自带的 psql,还是图形客户端工具,想要访问数据库,都需要一些连接参数 通常需要你输入 Host, Port, User, Password, Database 这五个关键信息!

  • Host: 数据库主机的域名或者 IP 地址
  • Port: PostgreSQL 的端口,默认是 5432
  • User: PostgreSQL 的用户名,在 Pigsty 中,默认的超级管理员用户名是 dbuser_dba
  • Pass: PostgreSQL 用户密码,在 Pigsty 中,默认的超级管理员密码是 DBUser.DBA
  • Database: 你要连接的数据库名称,在 Pigsty 单机默认模板中,默认的数据库名称是 meta

绝大多数客户端也接受另外一种 URL 形式的参数,也就是把上面五个要素组合起来,拼成一个 PGURL: 这个 URL 的形式是: postgresql://<username>:<password>@<host>:<port>/<dbname>, 比如,你这台数据库的默认超级管理员用户(如果没改密码),连接串就长成这样:

postgresql://dbuser_dba:DBUser.DBA@10.10.10.10:5432/meta
  • username: dbuser_dba
  • password: DBUser.DBA
  • host: 10.10.10.10(你可能要换成你自己的 IP,但如果是本机,可以用 127.0.0.1)
  • port: 5432 (可以省略)
  • dbname: meta

当然,不要忘了把这里的密码换成你自己的密码

什么?你跟我说没改过?不要心存侥幸,裸奔云服务器分分钟让你见识赛博世界的险恶 ;-)

在你往这台 VPS 放任何重要的东西之前,请务必阅读安全加固部分的教程!服务器被黑了,老冯可不负责!

用安全加固的方式重新安装一遍

上面那个安装教程很简单对不对?但全是默认参数,你的服务器可以被黑客轻松爆菊。最不济,你要把这几个密码给改了!

grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
pg_monitor_password: DBUser.Monitor
pg_replication_password: DBUser.Replicator
patroni_password: Patroni.API
haproxy_admin_password: pigsty
minio_secret_key: minioadmin

然后重新执行一遍

./pgsql-rm.yml   # 嘿,把之前的 PG 给卸载了,危险操作
./install.yml    # 重新执行完整安装

完整的安全配置教程,可以参考文档:https://doc.pgsty.com/zh/config/security/

请记得把 IP 地址,密码换成你自己的!

最后更新于