下面是PostgreSQL官网的介绍。
PostgreSQL是一个功能强大的开源对象关系数据库系统,它使用和扩展SQL语言,并结合了许多功能,这些功能可以安全地存储和扩展最复杂的数据工作负载。 PostgreSQL的起源可以追溯到1986年,它是加州大学伯克利分校的POSTGRES项目的一部分,在核心平台上已有30多年的积极开发经验。
PostgreSQL官网和中文社区都可以用来了解和学习PostgreSQL。其生产版本从EDB下载,根据需要下载对应版本即可。
本文使用的Windows-x64下12.4版本。
执行安装
Windows下的安装比较简单,直接运行安装包,根据图形化提示,选择安装路径
推荐使用NTFS格式分区安装PostgreSQL
选择需要的组件,默认全选即可
选择数据存储的位置
设置超级用户(数据库管理员)的密码
设置端口号,保持默认即可
选择数据库的语言环境(数据库运行时的字符编码格式),地区设置。此处选择默认的[Default localt]或者"C"(不使用区域,如果"Default locale"会导致安装不正确可以选择"C")
之后进行安装
如下安装完成,“Launch Stack Builder atexit? ”下取消选中,“Launch Stack Builder”会安装各种相关的附带工具,如果仅仅使用PostgreSQL,则无需安装这些工具。 点击"Finish"安装完成
修改设置文件
在PostgreSQL的数据文件下data\,找到其设置文件postgresql.conf。
打开文件,找到其设置项listen_addresses,默认其值为*,即所有主机都可以连接数据库。通常为了安全性考虑,数据库只允许本地连接,如下将其改为localhost,只允许本机连接。
listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
需要重复PostgreSQL服务才能生效
PostgreSQL的管理和使用
PostgreSQL提供了基于web的图形化管理工具(pgAdmin 4),和SQL命令行管理工具SQL Shell(psql)
pgAdmin 4介绍
打开登陆pgAdmin 4
如下,打开pgAdmin 4,程序启动后会在浏览器打开其管理的web页面,输入密码进入。
pgAdmin 4使用使用Python和js/jQuery重写的pgAdmin。pgAdmin 4可以采用三种方式进行部署:桌面部署(Desktop Deployment)、服务器部署(Server Deployment,默认)和容器部署(Container Deployment)。
设置pgAdmin 4中文界面
pgAdmin支持多语言界面,默认为英语。但可以改为中文界面,点击“File”下拉菜单,选择“Preferences”;找到左侧列表中的“miscellaneous”(杂项设置) -> “User language”,然后在右侧下拉列表中选项“Chinese (Simplified)”,点击保存。
重新刷新页面即变为中文。
数据库的连接和管理
如下,点击pgAdmin的左侧,Servers(会提示输入登陆密码),展开后,会看到PostgreSQL 12及相关的数据库对象。
可以看到新安装的PostgreSQL(数据库管理系统)带有一个数据库postgres;两个表空间:
pg_default、pg_global。数据库默认的表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间,他是模板数据库template0和template1的默认表空间。
pg_global是用来存储共享系统目录的默认空间。
新建服务器连接
右键点击左侧的Servers,选择"创建"——"服务器",在“创建-服务器”对话框中,设定一个连接名称,并指定一个服务器组
在"连接"中指定主机名或ip地址、端口、数据、用户名和密码。点击"保存"创建并连接到数据库服务器。
左侧的对象浏览器中可以查看和管理各种数据库对象。
在"数据库"节点下的任意节点位置,右键——选择"查询工具...",或者点击"数据库"下的任意节点,在"工具"菜单下——点击"查询工具",都可以打开查询编辑器。
查询工具用于执行各种SQL语句和命令,运行SQL脚本,显示查询执行计划,导出查询结果
创建数据库
在"服务器"或"数据库"节点下,右键——"创建"——选择“数据库”,即可创建数据库。
如下,指定数据库名、编码表空间等
在"SQL"选项卡下可以看到SQL语句
CREATE DATABASE demo
WITH
OWNER = postgres
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;
COMMENT ON DATABASE demo
IS '创建数据库的测试';
创建表
在"架构"(Schemas,有的版本翻译为"模式")节点下,右击"表",选择创建表
在"创建表"的对话框中,指定表名,"列"选项卡下,添加必要的列名、类型等
SQL下可以看到对应的SQL语句
CREATE TABLE public.test
(
"Id" integer NOT NULL,
"Name" character varying(50),
"Desc" character varying(120),
PRIMARY KEY ("Id")
);
ALTER TABLE public.test
OWNER to postgres;
COMMENT ON TABLE public.test
IS '创建表测试';
保存后在表下就能看到刚创建的表test了
删除表
右键表"test",选择删除/移除
删除数据库
右键数据库"demo",选择删除/移除
命令行管理接口psql
psql使用
命令行管理接口
Windows下在开始菜单——PostgreSQL 12下,或者直接在开始菜单处搜索psql
打开psql后,输入server、数据库、端口、用户名密码登陆
\help可以查看各个命令的语法
命令行中使用psql
也可以直接在命令行(cmd或powershell)中使用psql登陆PostgreSQL进行查询管理等操作
可以将<PostgerSQL安装目录>\bin\psql.exe路径加入到环境变量中,便于直接在命令中使用
执行psql -U postgres使用plsql登陆PostgreSQL,出现postgres=#表示登陆连接成功
PS C:\WINDOWS\system32> psql -U postgres
用户 postgres 的口令:
psql (12.4)
输入 "help" 来获取帮助信息.
postgres=#
psql中创建数据库
如下创建数据库并切换到新数据库
postgres=# CREATE DATABASE SHOP;
CREATE DATABASE
postgres=# \c shop
您现在已经连接到数据库 "shop",用户 "postgres".
shop=#
切换数据库:
\c [database_name]切换用户:
\c - [user_name]
psql其他命令
登录时指定用户名和数据库
登陆PostgreSQL时指定用户名和数据库:psql -U user -d dbname
psql -U postgres -d postgres
列出所有的数据库:\l
shop=# \l
数据库列表
名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限
-----------+----------+----------+--------------------------------+--------------------------------+-----------------------
demo | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
postgres | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
shop | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
template0 | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres +
| | | | | postgres=CTc/postgres
(5 行记录)
shop=#
切换数据库 \c dbname
列举表 \dt;查看索引 \di;查看表结构\d tablename
修改用户密码 \password [USERNAME]
退出psql \q
其他
关于查看表结构的SQL语句可以查看PostgreSQL - 查询表结构和索引信息的介绍
- 通过系统数据字典查询表结构
select col.table_schema, col.table_name, col.ordinal_position, col.column_name, col.data_type, col.character_maximum_length, col.numeric_precision, col.numeric_scale, col.is_nullable, col.column_default, des.description from information_schema.columns col left join pg_description des on col.table_name::regclass = des.objoid and col.ordinal_position = des.objsubid where table_schema = 'public' and table_name = 'product' order by ordinal_position;或
select * from information_schema.columns where table_schema='public' and table_name='product';
- 通过系统数据字典查询索引信息
select A.SCHEMANAME, A.TABLENAME, A.INDEXNAME, A.TABLESPACE, A.INDEXDEF, B.AMNAME, C.INDEXRELID, C.INDNATTS, C.INDISUNIQUE, C.INDISPRIMARY, C.INDISCLUSTERED, D.DESCRIPTION from PG_AM B left join PG_CLASS F on B.OID = F.RELAM left join PG_STAT_ALL_INDEXES E on F.OID = E.INDEXRELID left join PG_INDEX C on E.INDEXRELID = C.INDEXRELID left outer join PG_DESCRIPTION D on C.INDEXRELID = D.OBJOID, PG_INDEXES A where A.SCHEMANAME = E.SCHEMANAME and A.TABLENAME = E.RELNAME and A.INDEXNAME = E.INDEXRELNAME and E.SCHEMANAME = 'public' and E.RELNAME = 'product';
- 查询所有表名
select n.nspname, relname from pg_class c, pg_namespace n where c.relnamespace = n.oid and nspname = 'public' and relkind = 'r' order by relname;
- 查看表结构
SELECT a.attnum, a.attname AS field, t.typname AS type, a.attlen AS length, a.atttypmod AS lengthvar , a.attnotnull AS notnull, b.description AS comment FROM pg_class c, pg_attribute a LEFT JOIN pg_description b ON a.attrelid = b.objoid AND a.attnum = b.objsubid, pg_type t WHERE c.relname = 'product' AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid ORDER BY a.attnum;