windows 10 下安装
下载Zip版本,不用安装,Version 16.3 : EDB: Open-Source, Enterprise Postgres Database Management (enterprisedb.com)
直接复制文件夹 pgsql 作为主程序
管理员模式打开命令行删除相关文件夹
rmdir /s "pgAdmin 4"
初始化数据库
这里假设数据库文件本身放在项目根目录的 pgdata文件夹下
- 项目根目录下创建文件夹 pgdata,文件夹路径不能有中文
- 项目根目录下运行命令 初始化db,参考 中文环境下PostgreSQL的使用 – DoubleLi – 博客园 (cnblogs.com):
Linux:
pgsql\bin\initdb -D pgdata -U postgres -A password -E UTF-8 --locale=zh_CN.UTF-8 -W
Windows:
pgsql\bin\initdb -D pgdata -U postgres -A password -E UTF8 --locale=chinese -W
命令行说明:
-D pgdata 指定初始化的数据库目录(此处为当前目录的data文件夹)
-U postgres 数据库超级用户名(此处为postgres,如果不设置,会用当前windows用户名为账号)
-A password 数据库使用密码授权
-E utf8 数据库编码格式
–locale=C 数据库簇使用的本地化语言
-W 命令行执行后 输入密码:
报错: FATAL: invalid byte sequence for encoding "UTF8": 0xc1 0xbf 子进程已退出, 退出码为 1
: 项目路径不能有中文
pgsql\bin\initdb -D pgdata -U postgres -A password -E UTF8 --locale=chinese -W
属于此数据库系统的文件宿主为用户 "username".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "Chinese_China.936"进行初始化.
initdb: 无法为本地化语言环境"Chinese_China.936"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"
禁止为数据页生成校验和.
输入新的超级用户口令:
再输入一遍:
修复已存在目录 pgdata 的权限 ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......windows
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... Asia/Shanghai
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功
成功。您现在可以用下面的命令开启数据库服务器:
^"pgsql^\bin^\pg^_ctl^" -D pgdata -l 日志文件 start
手动启动、停止数据库:
pgsql\bin\pg_ctl -D pgdata start
pgsql\bin\pg_ctl -D pgdata stop
客户端
pgadmin(太大,速度很慢)
navicat(免费版功能有限)
Navicat | 免费下载 Navicat Premium Lite
DBeaver
DBeaver Community | Free Universal Database Tool
下载zip版本
HeidiSQL
https://www.heidisql.com/download.php
可能需要根据提示安装 VC++库然后重启 HeidiSQL。
中文文档笔记
PostgreSQL 15.7 手册:http://www.postgres.cn/docs/15/index.html
架构
PostgreSQL使用一种客户端/服务器的模型。一次PostgreSQL会话由下列相关的进程(程序)组成:
- 一个服务器进程,它管理数据库文件、接受来自客户端应用与数据库的联接并且代表客户端在数据库上执行操作。 该数据库服务器程序叫做postgres。
- 那些需要执行数据库操作的用户的客户端(前端)应用。 客户端应用可能本身就是多种多样的:可以是一个面向文本的工具, 也可以是一个图形界面的应用,或者是一个通过访问数据库来显示网页的网页服务器,或者是一个特制的数据库管理工具。 一些客户端应用是和 PostgreSQL发布一起提供的,但绝大部分是用户开发的。
和典型的客户端/服务器应用(C/S应用)一样,这些客户端和服务器可以在不同的主机上。 这时它们通过 TCP/IP 网络联接通讯。 你应该记住的是,在客户机上可以访问的文件未必能够在数据库服务器机器上访问(或者只能用不同的文件名进行访问)。
PostgreSQL服务器可以处理来自客户端的多个并发请求。 因此,它为每个连接启动(“forks”)一个新的进程。 从这个时候开始,客户端和新服务器进程就不再经过最初的 postgres进程的干涉进行通讯。 因此,守护者服务器进程总是在运行并等待着客户端联接, 而客户端和相关联的服务器进程则是起起停停(当然,这些对用户是透明的。我们介绍这些主要是为了内容的完整性)。
server端有一个守护进程:postgres 和 N 个负责连接的postgres进程。
交互式终端程序psql
PostgreSQL的交互式终端程序psql允许你交互地输入、编辑和执行SQL命令。
登录: pgsql\bin\psql -U postgres -W
sql 中 -- xxx
为注释,注意xxx前有空格,xxx为注释内容。
登录并列出数据库列表
pgsql\bin\psql -U postgres -W
口令:
psql (16.3)
输入 "help" 来获取帮助信息.
postgres=# -- 列出数据库
postgres=# \l
数据库列表
名称 | 拥有者 | 字元编码 | Locale Provider | 校对规则 | Ctype | ICU Locale | ICU Rules | 存取权限
---------------+----------+----------+-----------------+-------------------+-------------------+------------+-----------+-----------------------
original_data | postgres | UTF8 | libc | Chinese_China.936 | Chinese_China.936 | | |
postgres | postgres | UTF8 | libc | Chinese_China.936 | Chinese_China.936 | | |
template0 | postgres | UTF8 | libc | Chinese_China.936 | Chinese_China.936 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | Chinese_China.936 | Chinese_China.936 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
(4 行记录)
postgres=# -- 连接数据库
postgres=# \c original_data;
口令:
您现在已经连接到数据库 "original_data",用户 "postgres".
original_data=# --列出表格
original_data=# \dt
关联列表
架构模式 | 名称 | 类型 | 拥有者
----------+--------------+--------+----------
public | json_akshare | 数据表 | postgres
public | task_list | 数据表 | postgres
(2 行记录)
original_data=# SELECT version();
version
------------------------------------------------------------
PostgreSQL 16.3, compiled by Visual C++ build 1939, 64-bit
(1 行记录)
original_data=# SELECT current_date;
current_date
--------------
2024-07-30
(1 行记录)
psql程序有一些不属于SQL命令的内部命令。它们以反斜线开头,“\”。