随着数据库技术的不断发展,PostgreSQL作为一款功能强大的开源关系型数据库管理系统,在企业和开发者中越来越受欢迎。本文将从PostgreSQL的发展历史、基本使用方法和与MySQL的区别等方面,全面介绍PostgreSQL。
一、PostgreSQL是什么?
PostgreSQL(简称PG或pgsql)是一个功能强大的开源对象关系型数据库管理系统(ORDBMS),它支持SQL标准的大部分功能,并提供了许多高级特性。PostgreSQL以其稳定性、可靠性、功能完整性和可扩展性而闻名。
二、PostgreSQL的使用
1. 安装PostgreSQL
Windows系统安装
下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

安装包如下:
![]()
三、PostgreSQL的基本操作
1、psql连接数据库

指定主机和端口
psql -h localhost -p 5432 -U postgres -d postgres
-h, --host
指定数据库服务器的主机名或IP地址
-p, --port
指定数据库服务器的端口号
-U, --username
指定连接数据库的用户名
-d, --dbname
指定要连接的数据库名称
2、创建数据库
(1)、查询所有数据库命令:\l
或者:
SELECT datname FROM pg_database;
结果如下:
postgres=# \l 数据库列表 名称 | 拥有者 | 字元编码 | Locale Provider | 校对规则 | Ctype | ICU Locale | ICU Rules | 存取权限 -----------+----------+----------+-----------------+--------------------------------+--------------------------------+------------+-----------+----------------------- postgres | postgres | UTF8 | libc | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | | | template0 | postgres | UTF8 | libc | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | libc | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres (3 行记录) postgres=# SELECT datname FROM pg_database; datname ----------- postgres template1 template0 (3 行记录)
(2)、切换数据库
在psql命令行中,使用\c命令切换数据库,例如:
\c database_name
查看当前数据库:
SELECT current_database();
结果:
postgres=# SELECT current_database(); current_database ------------------ postgres (1 行记录)
(3)、查看数据库的创建信息和其他属性:
SELECT * FROM pg_database WHERE datname = 'database_name';
效果:
postgres=# SELECT * FROM pg_database WHERE datname = 'postgres'; oid | datname | datdba | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datfrozenxid | datminmxid | dattablespace | datcollate | datctype | daticulocale | daticurules | datcollversion | datacl -----+----------+--------+----------+----------------+---------------+--------------+--------------+--------------+------------+---------------+--------------------------------+--------------------------------+--------------+-------------+----------------+-------- 5 | postgres | 10 | 6 | c | f | t | -1 | 723 | 1 | 1663 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | | | | (1 行记录)
(4)、创建数据库
CREATE DATABASE mydb;
结果:
postgres=# CREATE DATABASE mydb;
CREATE DATABASE
(5)、创建表
先进入数据库
\c mydb
创建表sql
-- 创建用户表 CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
效果:
postgres=# \c mydb 您现在已经连接到数据库 "mydb",用户 "postgres". mydb=# CREATE TABLE users ( mydb(# id SERIAL PRIMARY KEY, mydb(# username VARCHAR(50) NOT NULL UNIQUE, mydb(# email VARCHAR(100) NOT NULL, mydb(# created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP mydb(# ); CREATE TABLE
(6)、查看表结构
\d users
结果:
mydb-# \d users 数据表 "public.users" 栏位 | 类型 | 校对规则 | 可空的 | 预设 ------------+-----------------------------+----------+----------+----------------------------------- id | integer | | not null | nextval('users_id_seq'::regclass) username | character varying(50) | | not null | email | character varying(100) | | not null | created_at | timestamp without time zone | | | CURRENT_TIMESTAMP 索引: "users_pkey" PRIMARY KEY, btree (id) "users_username_key" UNIQUE CONSTRAINT, btree (username)
(7)、插入数据
-- 插入单条数据 INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'); -- 插入多条数据 INSERT INTO users (username, email) VALUES ('jane_smith', 'jane@example.com'),('bob_wilson', 'bob@example.com');
结果:
mydb=# INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'); INSERT 0 1 mydb=# INSERT INTO users (username, email) VALUES ('jane_smith', 'jane@example.com'),('bob_wilson', 'bob@example.com'); INSERT 0 2
(8)、查询数据
SELECT * FROM users;
结果:
mydb=# SELECT * FROM users; id | username | email | created_at ----+------------+------------------+---------------------------- 1 | john_doe | john@example.com | 2026-01-09 09:35:30.469136 2 | jane_smith | jane@example.com | 2026-01-09 09:36:21.647538 3 | bob_wilson | bob@example.com | 2026-01-09 09:36:21.647538 (3 行记录)
条件查询
SELECT * FROM users WHERE username = 'john_doe';
结果:
mydb=# SELECT * FROM users WHERE username = 'john_doe'; id | username | email | created_at ----+----------+------------------+---------------------------- 1 | john_doe | john@example.com | 2026-01-09 09:35:30.469136 (1 行记录)
排序查询
mydb=# SELECT * FROM users ORDER BY created_at DESC; id | username | email | created_at ----+------------+------------------+---------------------------- 2 | jane_smith | jane@example.com | 2026-01-09 09:36:21.647538 3 | bob_wilson | bob@example.com | 2026-01-09 09:36:21.647538 1 | john_doe | john@example.com | 2026-01-09 09:35:30.469136 (3 行记录)
分页查询
SELECT * FROM users LIMIT 10 OFFSET 0;
结果:
mydb=# SELECT * FROM users LIMIT 10 OFFSET 0; id | username | email | created_at ----+------------+------------------+---------------------------- 1 | john_doe | john@example.com | 2026-01-09 09:35:30.469136 2 | jane_smith | jane@example.com | 2026-01-09 09:36:21.647538 3 | bob_wilson | bob@example.com | 2026-01-09 09:36:21.647538 (3 行记录)
(9)、更新数据
mydb=# UPDATE users SET email = 'newemail@example.com' WHERE username = 'john_doe'; UPDATE 1 mydb=# SELECT * FROM users WHERE username = 'john_doe'; id | username | email | created_at ----+----------+----------------------+---------------------------- 1 | john_doe | newemail@example.com | 2026-01-09 09:35:30.469136 (1 行记录)
(10)、创建索引
创建B-tree索引
-- 创建B-tree索引 CREATE INDEX idx_username ON users(username); -- 创建唯一索引 CREATE UNIQUE INDEX idx_email ON users(email); -- 创建复合索引 CREATE INDEX idx_username_email ON users(username, email);
(11)、事务处理
-- 开始事务 BEGIN; -- 执行操作 INSERT INTO users (username, email) VALUES ('test', 'test@example.com'); UPDATE users SET email = 'updated@example.com' WHERE username = 'test'; -- 提交事务 COMMIT; -- 或者回滚事务 ROLLBACK;
(12)、创建视图
-- 创建视图 CREATE VIEW active_users AS SELECT username, email, created_at FROM users WHERE created_at > CURRENT_DATE - INTERVAL '30 days';
结果:
mydb=# CREATE VIEW active_users AS mydb-# SELECT username, email, created_at mydb-# FROM users mydb-# WHERE created_at > CURRENT_DATE - INTERVAL '30 days'; CREATE VIEW
三、Navicat中创建视图

视图右键,点击新建视图

点击“视图创建工具”

拖动表到中间区域

点击构建并运行

点击保存按钮,输入视图名称,则视图创建完成。

浙公网安备 33010602011771号