1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG016-PG数据库对象:表/视图/序列基础认知

本文档风哥主要介绍PostgreSQL教程016相关内容。风哥教程参考PostgreSQL官方文档Server Administration, SQL Language内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

from oracle:www.itpux.com

内容简介:本文介绍PostgreSQL数据库中的核心对象,包括表、视图和序列的基础概念、设计原则和实战操作。风哥教程参考PostgreSQL官方文档Data Definition、Data Types等内容,通过实际案例演示这些对象的创建、管理和使用方法,帮助读者掌握PostgreSQL数据库对象的基础知识。

Part01-基础概念与理论知识

1.1 PostgreSQL数据库表的概念

PostgreSQL数据库表是存储数据的基本结构,由行和列组成。每一列代表一个数据字段,每一行代表一条完整的记录。表是关系型数据库的核心对象,所有数据最终都存储在表中。更多视频教程www.fgedu.net.cn

1.2 PostgreSQL数据库视图的概念

PostgreSQL数据库视图是基于一个或多个表的查询结果集的虚拟表。视图本身不存储数据,而是动态地从基表中检索数据。视图可以简化复杂查询、限制数据访问权限、提供数据的逻辑独立性。

1.3 PostgreSQL数据库序列的概念

PostgreSQL数据库序列是一种特殊的数据库对象,用于生成唯一的数字序列。序列主要用于为表的主键字段提供自增值,确保每条记录都有一个唯一标识。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 PostgreSQL数据库表设计建议

风哥教程针对风哥教程针对风哥教程针对生产环境建议:
– 表名使用有意义的名称,建议使用小写字母和下划线分隔
– 每个表应该有一个主键,用于唯一标识记录
– 选择合适的数据类型,避免使用过大的数据类型浪费存储空间
– 为经常查询的字段创建索引,提高查询性能
– 考虑表的分区策略,当表数据量较大时(超过50GB)考虑分区

2.2 PostgreSQL数据库视图设计建议

风哥教程针对风哥教程针对风哥教程针对生产环境建议:
– 视图名称建议以”v_”为前缀,便于区分
– 避免在视图中使用复杂的查询逻辑,影响性能
– 对于经常查询的复杂视图,考虑使用物化视图
– 合理利用视图权限,控制用户对敏感数据的访问

2.3 PostgreSQL数据库序列设计建议

风哥教程针对风哥教程针对风哥教程针对生产环境建议:
– 序列名称建议以”seq_”为前缀,便于区分
– 根据业务需求设置合适的起始值和步长
– 考虑序列的缓存设置,提高性能
– 对于高并发场景,避免使用单个序列导致的性能瓶颈

Part03-生产环境项目实施方案

3.1 PostgreSQL数据库表的创建与管理

创建表是PostgreSQL数据库操作的基础,需要定义表名、字段名、数据类型和约束条件。

$ psql -d fgedudb -U fgedu
Password for fgedu fgedu:
psql (18.3)
Type “help” for help.

fgedudb=>

— 创建用户表
CREATE TABLE fgedu_fgedus (
fgedu_id SERIAL PRIMARY KEY,
fgeduname VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status BOOLEAN DEFAULT TRUE
);

CREATE TABLE fgedu_– 查看表结构
\d fgedu_fgedus
Table “public.fgedu_fgedus”
Column | Type | Collation | Nullable | Default
————-+————————–+———–+———-+————————————–
fgedu_id | integer | | not null | nextval(‘fgedu_fgedus_fgedu_id_seq’::regclass)
fgeduname | character varying(50) | | not null |
email | character varying(100) | | not null |
password_hash | character varying(255) | | not null |
create_time | timestamp with time zone | | | CURRENT_TIMESTAMP
update_time | timestamp with time zone | | | CURRENT_TIMESTAMP
status | boolean | | | true
Indexes:
“fgedu_fgedus_pkey” PRIMARY KEY, btree (fgedu_id)
“fgedu_fgedus_email_key” UNIQUE CONSTRAINT, btree (email)
“fgedu_fgedus_fgeduname_key” UNIQUE CONSTRAINT, btree (fgeduname)

— 修改表结构:添加新字段
ALTER TABLE fgedu_fgedus ADD COLUMN last_login_time TIMESTAMP;

ALTER TABLE

— 删除表
— DROP TABLE IF EXISTS fgedu_fgedus;

3.2 PostgreSQL数据库视图的创建与管理

视图是基于表的查询结果,可以简化复杂查询,限制数据访问。

— 创建视图:只显示活跃用户的基本信息
CREATE VIEW v_active_fgedus AS
SELECT fgedu_id, fgeduname, email, create_time
FROM fgedu_fgedus
WHERE status = TRUE;

CREATE VIEW

— 查看视图
\d v_active_fgedus
View “public.v_active_fgedus”
Column | Type | Collation | Nullable | Default
————-+————————–+———–+———-+———
fgedu_id | integer | | |
fgeduname | character varying(50) | | |
email | character varying(100) | | |
create_time | timestamp with time zone | | |

— 查询视图
SELECT * FROM v_active_fgedus;
fgedu_id | fgeduname | email | create_time
———+———-+——-+————-
(0 rows)

— 修改视图
CREATE OR REPLACE VIEW v_active_fgedus AS
SELECT fgedu_id, fgeduname, email, create_time, last_login_time
FROM fgedu_fgedus
WHERE status = TRUE;

CREATE VIEW

— 删除视图
— DROP VIEW IF EXISTS v_active_fgedus;

3.3 PostgreSQL数据库序列的创建与管理

序列用于生成唯一的数字序列,通常用于主键字段。

— 创建自定义序列
CREATE SEQUENCE seq_order_id
START WITH 10000
INCREMENT BY 1
NO MAXVALUE
CACHE 10;

CREATE SEQUENCE

— 查看序列
\d seq_order_id
Sequence “public.seq_order_id”
Column | Type | Value
—————+———+———————
sequence_name | name | seq_order_id
last_value | bigint | 10000
start_value | bigint | 10000
increment_by | bigint | 1
max_value | bigint | 9223372036854775807
min_value | bigint | 1
cache_value | bigint | 10
log_cnt | bigint | 0
is_cycled | boolean | f
is_called | boolean | f

— 使用序列生成值
SELECT nextval(‘seq_order_id’);
nextval
———
10000
(1 row)

SELECT nextval(‘seq_order_id’);
nextval
———
10001
(1 row)

— 删除序列
— DROP SEQUENCE IF EXISTS seq_order_id;

Part04-生产案例与实战讲解

4.1 PostgreSQL数据库表实战案例

创建订单表,使用序列作为主键,并与用户表建立外键关系。

— 创建订单表
CREATE TABLE fgedu_orders (
order_id INTEGER PRIMARY KEY DEFAULT nextval(‘seq_order_id’),
fgedu_id INTEGER NOT NULL REFERENCES fgedu_fgedus(fgedu_id),
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
total_amount NUMERIC(10, 2) NOT NULL,
order_status VARCHAR(20) DEFAULT ‘pending’
);

CREATE TABLE fgedu_– 插入测试数据
INSERT INTO fgedu_fgedus (fgeduname, email, password_hash)
VALUES (‘testfgedu1’, ‘fgfgfgtest1@fgedu.net.cn’, ‘hashed_password1’),
(‘testfgedu2’, ‘test2@fgedu.net.cn’, ‘hashed_password2’);

INSERT 0 2

— 查询用户数据
SELECT * FROM fgedu_fgedus;
fgedu_id | fgeduname | email | password_hash | create_time | update_time | status | last_login_time
———+———-+———————+——————+——————————-+——————————-+——–+—————-
1 | testfgedu1 | fgfgfgtest1@fgedu.net.cn | hashed_password1 | 2026-04-02 10:30:45.123456+08 | 2026-04-02 10:30:45.123456+08 | t |
2 | testfgedu2 | test2@fgedu.net.cn | hashed_password2 | 2026-04-02 10:30:45.123456+08 | 2026-04-02 10:30:45.123456+08 | t |
(2 rows)

— 插入订单数据
INSERT INTO fgedu_orders (fgedu_id, total_amount)
VALUES (1, 199.99),
(2, 299.99);

INSERT 0 2

— 查询订单数据
SELECT * FROM fgedu_orders;
order_id | fgedu_id | order_date | total_amount | order_status
———-+———+—————————–+————–+————–
10002 | 1 | 2026-04-02 10:32:15.678901+08 | 199.99 | pending
10003 | 2 | 2026-04-02 10:32:15.678901+08 | 299.99 | pending
(2 rows)

4.2 PostgreSQL数据库视图实战案例

创建订单详情视图,关联用户表和订单表,显示完整的订单信息。学习交流加群风哥QQ113257174

— 创建订单详情视图
CREATE VIEW v_order_details AS
SELECT
o.order_id,
u.fgeduname,
u.email,
o.order_date,
o.total_amount,
o.order_status
FROM fgedu_orders o
JOIN fgedu_fgedus u ON o.fgedu_id = u.fgedu_id;

CREATE VIEW

— 查询订单详情视图
SELECT * FROM v_order_details;
order_id | fgeduname | email | order_date | total_amount | order_status
———-+———-+———————+—————————–+————–+————–
10002 | testfgedu1 | fgfgfgtest1@fgedu.net.cn | 2026-04-02 10:32:15.678901+08 | 199.99 | pending
10003 | testfgedu2 | test2@fgedu.net.cn | 2026-04-02 10:32:15.678901+08 | 299.99 | pending
(2 rows)

4.3 PostgreSQL数据库序列实战案例

修改序列缓存设置,提高高并发场景下的性能。

— 修改序列缓存为100
ALTER SEQUENCE seq_order_id
CACHE 100;

ALTER SEQUENCE

— 查看修改后的序列
\d seq_order_id
Sequence “public.seq_order_id”
Column | Type | Value
—————+———+———————
sequence_name | name | seq_order_id
last_value | bigint | 10003
start_value | bigint | 10000
increment_by | bigint | 1
max_value | bigint | 9223372036854775807
min_value | bigint | 1
cache_value | bigint | 100
log_cnt | bigint | 0
is_cycled | boolean | f
is_called | boolean | t

— 重置序列起始值
ALTER SEQUENCE seq_order_id
RESTART WITH 20000;

ALTER SEQUENCE

— 测试重置后的序列
SELECT nextval(‘seq_order_id’);
nextval
———
20000
(1 row)

Part05-风哥经验总结与分享

风哥提示:在生产环境中,数据库对象的设计和管理是整个数据库系统性能和稳定性的基础。合理的表结构设计可以提高数据查询效率,减少存储空间占用;视图的合理使用可以简化业务逻辑,提高开发效率;序列的优化配置可以提高高并发场景下的性能。

1. 表设计是数据库设计的核心,需要根据业务需求选择合适的数据类型和约束条件,避免过度设计和冗余字段。

2. 视图可以看作是数据库的API,为上层应用提供统一的数据访问接口,减少应用与数据库的耦合度。但要注意避免在视图中使用复杂的查询逻辑,影响性能。

3. 序列在高并发场景下可能成为性能瓶颈,建议根据实际情况调整序列的缓存设置。更多学习教程公众号风哥教程itpux_com

4. 定期检查表和索引的使用情况,根据查询需求优化表结构和索引设计,提高数据库性能。

5. 在生产环境中,建议使用版本控制工具管理数据库对象的变更,确保变更的可追溯性和回滚能力。from PostgreSQL:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息