Postgresql 开发环境搭建指南(WindowsLinux)
一、Postgresql 简介
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。
RDBMS 是关系数据库管理系统,是建立实体之间的联系,最后得到的是关系表。
ORDBMS在原来关系数据库的基础上,增加了一些新的特性。
1、优势
-
PostgreSQL数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,至少实现了SQL:2011标准中要求的179项主要功能中的160项(注:目前没有哪个数据库管理系统能完全实现SQL:2011标准中的所有主要功能)。
-
稳定可靠:PostgreSQL是唯一能做到数据零丢失的开源数据库。目前有报道称国内外有部分银行使用PostgreSQL数据库。
-
开源省钱: PostgreSQL数据库是开源的、免费的,而且使用的是类BSD协议,在使用和二次开发上基本没有限制。
-
支持广泛:PostgreSQL 数据库支持大量的主流开发语言,包括C、C++、Perl、Python、Java、Tcl以及PHP等。
-
PostgreSQL社区活跃:PostgreSQL基本上每3个月推出一个补丁版本,这意味着已知的Bug很快会被修复,有应用场景的需求也会及时得到响应。
2、特征
-
函数:通过函数,可以在数据库服务器端执行指令程序。
-
索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。
-
触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。
-
多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。
-
规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。
-
数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据等。
-
全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。
-
NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。
-
数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。
3、学习资料
中文官网 postgresql.ac.cn
官网文档 https://postgresql.ac.cn/docs/
二、环境搭建
1、安装 PostgreSQL
1.1、Windows 环境
这里使用 EnterpriseDB 来下载安装,EnterpriseDB 是全球唯一一家提供基于 PostgreSQL 企业级产品与服务的厂商。
下载地址:EDB: Open-Source, Enterprise Postgres Database Management。
这里我们选择最新版本 16.4,下载网速有点慢,
配置安装目录,
配置需要安装的组件,全选,
配置数据目录,
配置超管账号密码,
配置端口号,
安装完毕。
1.2、Linux 环境
最终会跳转到指南页面,https://www.postgresql.org/download/linux/ubuntu/
一般的流程是引入软件包下载源,然后进行 apt 安装软件包,Ubuntu 通常已经包含了 postgresql 软件源,
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
# 安装最新版本的 postgresql
sudo apt install postgresql -y
查看运行状态跟版本,
sudo systemctl is-active postgresql
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
psql --version
安装过程会创建一个名为postgres
的与默认postgres
角色关联的用户账号,我们可以通过该账号来访问 PostgreSQL,
sudo -i -u postgres
(base) sam@sam-PC:~$ sudo -i -u postgres
postgres@sam-PC:~$ psql
psql (11.18 (Deepin 11.18-0+deb10u1))
输入 "help" 来获取帮助信息.
postgres=# help
您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面
键入: \copyright 显示发行条款
\h 显示 SQL 命令的说明
\? 显示 pgsql 命令的说明
\g 或者以分号(;)结尾以执行查询
\q 退出
postgres=# \q
postgres@sam-PC:~$ exit
注销
(base) sam@sam-PC:~$
2、PostgreSQL GUI 工具
官网地址 https://www.pgadmin.org/
2.1、Windows 环境
PostgreSQL 安装包也自带有 pgadmin4,
点击左上角 Servers,
输入账号密码,
打开查询窗口,
界面支持中文,
模式默认是桌面,也可以支持 Web 模式,
D:\app\PostgreSQL\16\pgAdmin 4\python>python.exe ../web/pgAdmin4.py
- couldn't import psycopg 'c' implementation: DLL load failed while importing pq: 找不到指定的模块。
- couldn't import psycopg 'binary' implementation: No module named 'psycopg_binary'
- couldn't import psycopg 'python' implementation: libpq library not found
这个错误信息表明在尝试导入 psycopg 模块时出现了问题,具体是因为找不到 libpq 库。但是安装 PostgreSQL 时已经有这些库了。
# 解决方案:
D:\app\PostgreSQL\16\bin 添加到系统变量 path 中
http://127.0.0.1:5050/browser/
2.2、Linux 环境
2.2.1、使用软件仓库安装 pgadmin4
#
# Setup the repository
#
# Install the public key for the repository (if not done previously):
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
# Create the repository configuration file:
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
#
# Install pgAdmin
#
# Install for both desktop and web modes:
sudo apt install pgadmin4
# Install for desktop mode only:
sudo apt install pgadmin4-desktop
# Install for web mode only:
sudo apt install pgadmin4-web
# Configure the webserver, if you installed pgadmin4-web:
sudo /usr/pgadmin4/bin/setup-web.sh
遇到报错,
(base) sam@sam-PC:~$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
命中:2 https://community-packages.deepin.com/deepin apricot InRelease
命中:3 https://pro-driver-packages.uniontech.com eagle InRelease
命中:4 https://community-packages.deepin.com/driver driver InRelease
命中:5 https://community-packages.deepin.com/printer eagle InRelease
命中:1 https://app-store-files.uniontech.com/240828152202655/appstore deepin InRelease
忽略:6 https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/apricot pgadmin4 InRelease
错误:7 https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/apricot pgadmin4 Release
404 Not Found [IP: 72.32.157.246 443]
正在读取软件包列表... 完成
E: 仓库 “https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/apricot pgadmin4 Release” 没有 Release 文件。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
(base) sam@sam-PC:~$
解决,修改 /etc/apt/sources.list.d/pgadmin4.list,
sudo vim /etc/apt/sources.list.d/pgadmin4.list
# 添加
deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble pgadmin4 main
sudo apt update
sudo apt install pgadmin4-web
当前 Pgsql 版本不兼容 pgadmin4,只能换个方式安装,
2.2.2、使用 pip 安装 pgadmin4
$ sudo mkdir /var/lib/pgadmin
$ sudo mkdir /var/log/pgadmin
$ sudo chown $USER /var/lib/pgadmin
$ sudo chown $USER /var/log/pgadmin
# 创建 pgadmin4 python 环境
$ python3 -m venv pgadmin4
$ source pgadmin4/bin/activate
# 安装 pgadmin4
(pgadmin4) $ pip install pgadmin4
...
(pgadmin4) $ pgadmin4
NOTE: Configuring authentication for SERVER mode.
Enter the email address and password to use for the initial pgAdmin user account:
Email address: user@domain.com
Password:
Retype password:
Starting pgAdmin 4. Please navigate to http://127.0.0.1:5050 in your browser.
* Serving Flask app "pgadmin" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
Conda 环境也可以,
# 配置路径
(myenv3.8) sam@sam-PC:~/anaconda3/envs/myenv3.8/lib/python3.8/site-packages/pgadmin4$ ls
babel.cfg branding.py config_distro.py DEPENDENCIES jest.config.js migrations pgacloud pgAdmin4.py __pycache__ sbom.json version.py webpack.shim.js
babel.config.json commit_hash config.py docs LICENSE package.json pgadmin pgAdmin4.wsgi README.md setup.py webpack.config.js yarn.lock
(myenv3.8) sam@sam-PC:~/anaconda3/envs/myenv3.8/lib/python3.8/site-packages/pgadmin4$
http://127.0.0.1:5050/browser/
配置 postgres 账号密码,然后创建一个新的 Servers 连接,
# psql
ALTER USER postgres WITH PASSWORD 'your_password';
配置 pgAdmin4 账号密码,登录,
2.3、语法提示
3、数据库迁移工具 pgloader
官网文档 https://pgloader.readthedocs.io/en/latest/install.html
一个著名的开源工具,它使用COPY命令将其他数据库中的数据导入PostgreSQL,加载数据、索引和外键,并按预期将数据转换为PostgreSQL。
-
pgloader 将来自 MS SQL、SQLite、MySQL、CSV 等各种来源的数据加载到 PostgreSQL 中。
-
它在 PostgreSQL 许可下获得许可,可以免费使用。
-
pgloader 是一个跨平台的软件。
-
Docker 镜像可用。
注意事项,工具在 Windows 上的支持并不完善,最好使用 Linux 操作系统,