PostgreSQL 是一个功能强大的开源对象关系数据库系统,经过超过 35 年的积极开发,在可靠性、功能稳健性和性能方面赢得了良好的声誉,该数据库产品在开源 BSD 协议下发行,这意味着如果你有能力在此基础之上进行二次开发的,可以基于它来构建你商业型产品,作为一名开源软件爱好者一个多多使用的开源软件。 MySQL 在被 Oracle 收购之后出现了 MariaDB 分支这些都是兼容 SQL 标准关系数据库,在数据库引擎排行榜上显示 PostgreSQL 正在慢慢上升趋势,作为一款开源数据库能和一些企业级专有数据库软件排名不分上下,已经表示出它的优势所在了。
PostgreSQL 和传统的关系数据库相比,还有一个特别特性是对象关系型数据库,写过面向对象编程语言 Java 会熟悉多个对象继承关系,类似的 Postgres 它弥补了关系型编程和面向对象编码之间的差距,这使得对象的定义以及表的继承成为可能,从而导致创建更复杂的数据库系统;此外 PostgreSQL 除了传统关系数据库支持的数据类型以外还有一些特殊自定义数据类型,例如 Array 、Points 、 Inet 、JSON 、XML 等类型。
安装 PostgreSQL
这里我采用的通过 Homebrew 的方式进行安装 PostgreSQL ,通过 Homebrew 安装的软件包可以方便管理也是一种比较即可的方式;在使用 Homebrew 安装任何东西之前,你应该始终确保它是最新的并且是健康的:
brew update & brew doctor
这两条命令会更新你电脑上的 Homebrew 并且自动检测健康状态和自动修复一些常见的问题,并且也会报告一些无法自行修复的错误。接下来就可以使用 Homebrew 进行安装 PostgreSQL 使用命令如下:
brew reinstall postgresql@14
这个安装过程可能比较缓慢,取决于当前电脑所在地区的网络情况,可以切换到国内的软件源进行安装,使用下面命令就可以切换阿里云的软件源,如下命令:
# 替换brew.git
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 替换homebrew-core.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# 刷新源
brew update
安装完成之后可以使用 brew services list
查看当前支持管理的软件服务,启动 Postgres 也很简单,只需要使用下面的命令来启动 Postgres 服务:
brew services start postgresql@14
当启动成功之后,在最新的 MacOS 系统设置中的登录项可以查看到此数据库的进程信息,如下图所示:
可以通过 psql --version
命令来查看是否成功安装,停止 Postgres 只需要使用下面命令停止进程:
brew services stop postgresql@14
如果是使用 Linux 环境可以在官网查看具体安装步骤文档,但是要注意的是在 Linux 系统环境下 Postgres 采用的系统用户的方式进行管理,默认超级用户是一个名为 postgres
用户,需要使用下面的命令切换:
# 切换换默认超级管理员用户登录到数据库中
sudo -u postgres psql
# 切换用户
sudo -i -u postgres
默认使用端口 5432 ,默认的 Postgres 用户是 postgres
,不需要密码进行身份验证因此如果需要添加密码,我们必须首先以 postgres
用户身份登录并连接。
修改密码
需要注意的如果要修改默认用户的密码必须有足够的权限,如果这里出现了默认权限不够情况,可以在 /opt/homebrew/var/postgresql@14/pg_hba.conf
配置文件中进行修改,身份验证配置文件是身份验证规则列表:
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all md5
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
上方的配置项是要求每次进行连接的时必须要进行鉴权,只要鉴权成功之后才能连接,默认的 trust 代表可信的连接,意思是没有密码也行为没有校验过程,这里全部修改为 md5 的方式了,意思是密码会以 md5 形式传送给数据库较安全,现在就可以在 psql 命令行提示符下建立了到 Postgres 的连接,并且输入一下命令来更改默认用户的密码:
postgres=# ALTER USER dings PASSWORD 'myPassword';
ALTER ROLE
Postgres 还有另外一种方式可以修改默认的账号密码,在命令行提示符下使用 \password postgres
来给 postgres 用户设置密码,效果是一样的。另外如果是生产环境数据库部署在网络云主机环境中,这时还需要设置允许远程连接,在配置文件 postgresql.conf
中修改配置如下:
listen_addresses = '*'
重启 Postgres 后生效,这时候任何远程 IP 都可以连接。使用 Homebrew 默认安装的软件会开机自动启动,如果要禁止自动启动需要执行下面这条命令,如果不知道对应软件位置可以使用 brew services list
命令进行查看,然后使用如下命令禁止开机自启动:
launchctl unload -w ~/Library/LaunchAgents/homebrew.xxxx.xxx.plist
其 launchctl unload -w <路径>
的作用为停止并卸载和禁用任务,该任务将不会在下次登录时重新启动。
操作命令
作为一名开发人员最常也是操作数据库里面的数据信息,这时就需要掌握一些基本 DBA 命令,下面是我列出的一些常用的运维操作命令:
# 创建一个用户名为 postgres 用户并且设置密码
createuser postgres -P
# 为 postgres 用户创建一个名为 test_db 的数据库编码为utf8
createdb -Opostgres -Eutf8 test_db
# 删除一个数据库
dropdb test_db;
# 创建新表
CREATE TABLE user(name VARCHAR(20), signup_date DATE);
# 插入数据
INSERT INTO user_info(name, signup_date) VALUES('张三', '2023-01-01');
# 查询记录
SELECT * FROM user_info;
# 更新数据
UPDATE user_info set name = '李四' WHERE name = '张三';
# 删除记录
DELETE FROM user_info WHERE name = '李四' ;
# 添加字段
ALTER TABLE user_info ADD email VARCHAR(40);
# 更改字段类型
ALTER TABLE user_info ALTER COLUMN signup_date SET NOT NULL;
# 设置字段默认值(注意字符串使用单引号)
ALTER TABLE user_info ALTER COLUMN email SET DEFAULT '[email protected]';
# 去除字段默认值
ALTER TABLE user_info ALTER email DROP DEFAULT;
# 重命名字段
ALTER TABLE user_info RENAME COLUMN signup_date TO signup;
# 删除字段
ALTER TABLE user_info DROP COLUMN email;
# 表重命名
ALTER TABLE user_info RENAME TO backup_tbl;
# 删除表
DROP TABLE IF EXISTS backup_tbl;
# 删除库
DROP DATABASE IF EXISTS hello;
还有一些常见命令行提示命令说明:
\l 列出所有数据库
\c 选择切换数据库
\password 设置密码
\q 退出
\h 查看SQL命令的解释,比如\h select
\? 查看psql命令列表
\c [database_name] 连接其他数据库
\d 列出当前数据库的所有表格
\d [table_name] 列出某一张表格的结构
\du 列出所有用户
\e 打开文本编辑器
\conninfo 列出当前数据库和连接的信息