引言:为什么选择 PostgreSQL?
在数据库领域,PostgreSQL 就像一位深藏不露的 "全能选手"。作为一款开源免费的关系型数据库,它不仅支持 SQL 标准,还提供了 JSON 存储、全文检索、地理信息处理等高级功能。无论是中小型应用还是企业级系统,无论是 Windows、Linux 还是 macOS 环境,PostgreSQL 都能完美适配。
与其他数据库相比,它的优势显而易见:
- 完全开源免费,无需担心版权问题
- 强大的扩展性,支持自定义数据类型和函数
- 完善的事务机制和 ACID 特性,保证数据一致性
- 活跃的社区支持,持续迭代更新
本文将带你从零开始,完成 PostgreSQL 的安装与配置,轻松掌握基本使用方法。
一、PostgreSQL 安装
1.1 Windows 系统安装步骤(以 Win11 为例)
步骤 1:下载安装包
下载网址:EDB: Open-Source, Enterprise Postgres Database Management
安装过程:
这里我选择的是 17.5版本的windows x86-64安装包
点击下载
点击安装
在弹出的setup窗口中点击 Next
然后自定义文件的安装路径(建议修改除C盘以外的盘符,除非只有C盘)
这里它默认勾选了四个安装插件,默认全选,直接点击 Next
接下来对数据库进行用户密码设置,完成后点击 ->next
(可以更改,如果设置别的自己务必记住)
这里的Port
是指PostgreSQL的默认端口号:5432
,直接点击下一步 ⇒next
此处是设置语言,不建议修改为
chinese/简体中文
,可能会报错!点击下一步 ⇒next
最后这里将预览文件路径及数据库信息,直接点击下一步 ⇒next
安装程序现在已准备好开始在您的计算机上安装PostgreSQL。
等待安装完成后在弹出的界面取消勾选Stack Builder,然后点击Finish
关闭窗口。
Stack Builder是PostgreSQL的一个实用工具,提供了可视化界面,可以根据自己的情况进行安装。
这里先不安装,后续如果想安装可在进行安装
二、配置环境变量
1.设置Path变量:
首先复制PostgreSQL的bin
路径;
打开设置搜索高级系统设置
,然后点击高级系统设置
,再点击环境变量
,在系统变量中找到Path
变量;
选中Path
变量,点击编辑
,然后点击新建
,将复制好的bin
路径复制进去,最后点击三个确定
。
2.设置PG_HOME变量:
首先复制PostgreSQL文件的安装路径,即在安装step3的第二步时选择的路径,我的是D:\software\PostgreSQL
;
3.设置PGDATA变量
自此,PostgreSQL的环境变量已成功配置完成!
4.将PgSQL设置为自动启动
5.查看PgSQL是否完成配置
1.打开dos命令窗(快捷键:Win + R)
2.查看PgSQL版本
psql --version
三、使用 pgAdmin4 图形化创建和管理 PostgreSQL 数据库
一、pgAdmin 4安装
①访问pgAdmin官网,下载路径如下:
②选择个人电脑所对应的系统,我的电脑是Windows11系统,所以选择Windows
③选择所需要的pgAdmin版本,我选择的是最新的v9.5版本
④下载完成后双击pgadmin4-9.5-x64.exe文件进行安装
⑤选择install for me only,根据自身需求,也可选择为所有用户安装
⑥后续只需一直next,并选择安装路径即可安装完毕
⑦点击开始菜单选择pgAdmin运行
至此,pgAdmin4算是安装完成。
二、使用pgAdmin4
1、修改界面语言
如果有需要,可以先将界面语言修改为简体中文,以方便后续使用。
点击菜单【File】—【Preferences】,打开偏好设置。
在左侧找到【User Language】,右侧点击下拉框,选择 【简体中文】,然后点击【Save】保存。
此时会弹出重新加载 pgAdmin4之后,界面已经更换为简体中文。一个提示框,提示需要重新加载 pgAdmin4,点击【Refresh】刷新。
重新加载 pgAdmin4之后,界面已经更换为简体中文。
2、连接到 PostgreSQL 数据库服务器。
点击菜单【对象】–【注册】–【服务器】。
在界面中输入 PostgreSQL 数据库服务器的各项连接信息。
【General】–【名称】:为连接起一个方便记忆和区分的名称,比如:PG-Database
在【连接】页面输入 PostgreSQL 数据库服务器的IP地址和密码,如果使用的不是默认端口【5432】,则也需要修改为配置的连接端口。
点击保存,此时 pgAdmin4 会使用配置的信息尝试连接 PostgreSQL 数据库服务器。
连接成功后,就会出现以下界面:
如果连接不成功,则需要检查输入的服务器IP地址和密码是否正确,客户端电脑和服务器的防火墙设置是否正确。
3、创建新的数据库
(1)右键单击【数据库】–【创建】–【数据库】。
在弹出的【创建数据库】窗口配置新建数据库的各项信息。
【数据库】:创建数据库的名称,必须填写。
【OID】: 在新版本的PostgreSQL中可以忽略。
【所有者】:默认为postgres系统用户,学习阶段保持默认即可。
【注释】:可以备注所创建的数据库的用途。
补充了解冷知识:
【OID】:在 PostgreSQL 数据库中,OID(Object
Identifier,对象标识符)是一种唯一标识数据库中的对象(通常是表中的行)的整数标识符。OID在过去用于唯一标识表中的行,但从 PostgreSQL 12 版本开始,默认情况下已不再使用OID列作为表的隐藏列。OID列不再被自动创建,因此我们在创建表时不会看到它。
如果我们在使用 pgAdmin 4 创建 PostgreSQL 数据库时看到一个选项或设置涉及OID,那是因为我们可以选择是否要在特定表中启用或禁用OID列。
在新版本的 PostgreSQL中,不再需要使用OID,而且它已不再是默认行为。大多数用户不再使用OID列,因为它会增加存储和维护的开销,而且通常没有必要。
如果我们不确定是否需要启用OID列,通常情况下可以不必担心它。在pgAdmin4中,我们可以在创建表时选择是否包括OID列,但如果不明确需要它,建议将其保持禁用。
如果您有特定的用途需要使用OID列,那么可以启用它。但要注意,需要小心处理OID列,以避免潜在的性能和管理问题。
在【定义】页面中,我们可以设置数据库的字符集编码、模板、表空间和连接数限制等设定数据库参数,初学阶段我们可以不选择,采用系统默认就好。
【连接限制】:最大连接数限制,默认为 -1 ,表示可以无限制连接,如果需要限制连接数,可以输入一个正整数,比如【300】。
在【安全】页面中,是可视化完成grant授权命令的地方,一般用不到。
在我们真实的工作场景中,数据库权限是由公司数据库管理员【DBA】来统一设置和管理的,开发人员一般不能设置。
我们这里作为学习和演示,就使用 postgres 账户给public账户授权【ALL】了。
在【参数】页面中,可以设置具体的数据库参数。
在这里,我们设置了一个参数 “application_name” 的值为 “Default” ,当然也可以不设置。
除非有特殊需求,【高级】页面一般不用设置。
在【SQL】页面中,可以查看创建数据库时所执行的SQL语句,其中包含了之前的所有设置。
其实创建数据库的过程就是在PostgreSQL 服务器中逐条执行【SQL】页面中的所有建库SQL语句的过程。
点击保存之后,就会显示出新创建的数据库的详细信息
(2)、使用SQL命令创建数据库
除了使用可视化工具(如 pgAdmin 4)来创建数据库,我们还可以使用 SQL 命令来创建数据库。
在 PostgreSQL 中,我们可以使用 CREATE DATABASE 语句来执行此操作。以下是一个基本的示例:
CREATE DATABASE mydatabase;
这将创建一个名为 “mydatabase” 的新数据库。
我们可以将 “mydatabase” 替换为我们希望创建的数据库的名称。还可以使用其他选项来指定数据库的字符集、所有者和其他属性。
例如,如果我们想创建一个指定字符集和所有者的数据库,可以这样做:
CREATE DATABASE pgtest
WITH OWNER = postgres
ENCODING = 'UTF8';
这将创建一个名为 “pgtest” 的数据库,将其所有者设置为 “postgres”,字符集设置为 UTF-8。
点击【工具】–【查询工具】
可以看到在右侧出现一个查询窗口,这就是输入 SQL 指令的地方。
将上面的 CREATE DATABASE 语句复制粘贴到 SQL窗口。
点击“执行”按钮,或按F5,执行刚才输入的SQL语句
点击右键刷新数据库列表
就可以看到刚创建的 “pgtest” 的数据库了。
4、删除数据库
如果在实际工作中一个数据库不再需要使用或者需要删除处理,我们可以使用 pgAdmin 4 进行可视化删除数据库,或者使用 SQL 命令来删除数据库。
4.1、在 pgAdmin 4 中可视化删除数据库:
打开 pgAdmin 4 并连接到您的 PostgreSQL 服务器。
在左侧的“对象”资源树中,展开 “Databases”(数据库)。
找到要删除的数据库,右键单击它,然后选择 “Delete/Drop”(删除/丢弃)。
在确认对话框中,确认您要删除数据库并点击 “OK”。
这将使用可视化界面删除数据库。
4.2、使用 SQL 命令删除数据库:
在 SQL 中,使用 DROP DATABASE
语句来删除数据库。以下是一个示例:
DROP DATABASE pgtest;
这将删除名为 “pgtest” 的数据库。为确保谨慎操作,建议在删除之前先对将要删除的数据库进行备份操作,因为删除数据库将永久丢失数据库中的所有数据。
四、PgSQL基础语法
1.创建表
CREATE TABLE student(
Sno char(6) PRIMARY KEY,
Sname VARCHAR(8),
Ssex CHAR(2),
Sage INTEGER,
Sdept VARCHAR(15)
);
CREATE TABLE COURSE(
Cno CHAR(4) PRIMARY KEY,
Cname VARCHAR(20),
Cpno CHAR(4),
Ccredit INTEGER
);
CREATE TABLE SC(
Sno CHAR(6),
Cno CHAR(4),
Grade DECIMAL(12,2),
PRIMARY KEY(Cno,Sno)
);
2.增删改查
2.1 插入
插入数据
INSERT INTO student VALUES();
-- 例如:
INSERT INTO student VALUES('4001','赵茵','男',20,'SX');
-- 可以同时为列定义约束,语法:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
增加列
ALTER TABLE products ADD COLUMN description text;
-- 例如:在student表添加属性sbirthdate列,类型为datetime
ALTER TABLE student ADD COLUMN sbirthdate date;
2.2删除
清空列
DELETE column_name FROM table_name WHERE column_name=xxx
移除列
ALTER TABLE products DROP COLUMN description;
-- 如果该列被另一个表的外键所引用,PostgreSQL不会安静地移除该约束。我们可以通过增加CASCADE来授权移除任何依赖于被删除列的所有东西:
ALTER TABLE products DROP COLUMN description CASCADE;
清空表
DELETE FROM table_name
删除表
DROP TABLE table_name
删除库
DROP DATABASE database_name
2.3修改
修改默认值
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
-- 注意这不会影响任何表中已经存在的行,它只是为未来的INSERT命令改变了默认值。
-- 要移除任何默认值,使用:
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
修改列的数据类型
ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
-- 例如:将CARD表的NAME最大列宽增加到10个字符(假定原为6个字符)
ALTER TABLE CARD ALTER COLUMN NAME TYPE VARCHAR(10);
修改列名
ALTER TABLE products RENAME COLUMN product_no TO product_number;
修改表名
ALTER TABLE products RENAME TO items;
2.4查询
SELECT * FROM table_name WHERE enquiry_conditions
3.约束
增加约束
ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
-- 要增加一个不能写成表约束的非空约束,可使用语法:
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
移除约束
ALTER TABLE products DROP CONSTRAINT some_name;
-- 对除了非空约束之外的所有约束类型都一样有效。为了移除一个非空约束可以用:
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
禁用约束
alter table t2 disable trigger all
启动约束
alter table t2 enable trigger all
4.其他
- 用 ALTER TABLE 在一张已存在的表上添加列的语法如下:
ALTER TABLE table_name ADD column_name datatype;
- 在一张已存在的表上 DROP COLUMN(删除列),语法如下:
ALTER TABLE table_name DROP COLUMN column_name;
- 修改表中某列的 DATA TYPE(数据类型),语法如下:
ALTER TABLE table_name ALTER COLUMN column_name TYPE datatype;
- 给表中某列添加 NOT NULL 约束,语法如下:
ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
- 给表中某列 ADD UNIQUE CONSTRAINT( 添加 UNIQUE 约束),语法如下:
ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);
- 给表中 ADD CHECK CONSTRAINT(添加 CHECK 约束),语法如下:
ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);
- 给表 ADD PRIMARY KEY(添加主键),语法如下:
ALTER TABLE table_name
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);
- DROP CONSTRAINT (删除约束),语法如下:
ALTER TABLE table_name
DROP CONSTRAINT MyUniqueConstraint;
- 如果是 MYSQL ,代码是这样:
ALTER TABLE table_name
DROP INDEX MyUniqueConstraint;
- DROP PRIMARY KEY (删除主键),语法如下:
ALTER TABLE table_name
DROP CONSTRAINT MyPrimaryKey;
- 如果是 MYSQL ,代码是这样:
ALTER TABLE table_name
DROP PRIMARY KEY;
- 计数
ROW_NUMBER ( ) OVER ( PARTITION BY column_name ORDER BY column_name) line_number