学完安装、启动、连接之后,下一步就该进入真正的“数据怎么组织”了。
在 PostgreSQL 里,初学者最容易混淆的三个词是:database、schema 和 table。
先记住一个最直观的关系:
database 是一个独立的数据空间schema 是数据库里的逻辑分组table 是真正存放结构化数据的地方可以把它想成一层层往下拆:一个 PostgreSQL 服务里有多个 database,一个 database 里可以有多个 schema,一个 schema 里又可以有多张 table。
database 是数据库实例里的一个独立数据库。
比如同一个 PostgreSQL 服务里,可以同时有这些数据库:
postgresblogshoptest它们之间的数据默认是隔离的。你连接到 blog 数据库时,不能直接去查 shop 里的表。
schema 可以理解成数据库内部的一层命名空间。
它的作用通常有两个:
PostgreSQL 默认会有一个 public schema。很多入门项目只用 public 就够了。
table 就是最常见的数据表。
表由“列”和“行”组成:
例如用户表 users 里,可能有这些列:
idnameemailis_activecreated_at每插入一位用户,就会多一行数据。
很多人刚接触 PostgreSQL 时会问:既然已经有 database 了,为什么还要有 schema?
因为它们解决的问题不同。
database 更像“大隔离”schema 更像“数据库内部的整理方式”一个常见理解方式是:
例如一个业务系统可能只有一个 app 数据库,但里面有:
publicbillingreporting这样比把所有表都塞进同一个命名空间更清楚。
不过对初学者来说,不需要一开始就设计很多 schema。先把 database、table 和基础 SQL 练熟更重要。
创建数据库最常见的命令很简单:
CREATE DATABASE bookstore;
如果要删除一个数据库:
DROP DATABASE bookstore;
但要注意两点:
所以学习阶段先记住:CREATE DATABASE 用来新建,DROP DATABASE 用来删除,删除动作要谨慎。
如果你想在一个数据库里再细分逻辑空间,可以创建 schema:
CREATE SCHEMA blog;
创建之后,表就可以放在这个 schema 下面:
CREATE TABLE blog.posts (id integer,title text);
如果你不写 schema 名,PostgreSQL 通常会默认放到 public。
下面先看一个短小的例子:
CREATE TABLE users (id integer,name text,is_active boolean DEFAULT true,created_at timestamp DEFAULT NOW());
这个例子里:
users 是表名id、name、is_active、created_at 是字段名integer、text、boolean、timestamp 是数据类型DEFAULT 表示如果插入时没提供值,就使用默认值例如:
is_active boolean DEFAULT true 表示默认启用created_at timestamp DEFAULT NOW() 表示默认使用当前时间字段名描述“这列数据是什么”。
例如:
name 表示用户名price 表示价格created_at 表示创建时间字段名最好做到见名知意。
数据类型限制“这列应该存什么样的值”。
例如:
boolean正确的数据类型能让查询、排序、过滤和约束都更可靠。
默认值用于减少重复输入,也能让数据更稳定。
例如:
0 开始不用一开始记完整类型大全,先掌握最常用的一组就够了。
numericnumeric 适合存需要精确计算的数值,例如金额、单价、折扣。
price numeric(10, 2)
这通常表示最多 10 位数字,其中 2 位是小数。
金额场景一般更推荐 numeric,而不是随手用浮点数。
texttext 用来存不定长文本。
title text
用户名、标题、备注、描述这类字段,经常会用到它。
booleanboolean 表示真假值。
is_published boolean DEFAULT false
常见于:
timestamptimestamp 用来保存日期和时间。
created_at timestamp DEFAULT NOW()
这是业务系统里很常见的一类字段。
jsonjson 用来保存 JSON 格式的数据。
profile json
它会保留原始 JSON 文本结构,适合需要按 JSON 格式存储的数据。
jsonbjsonb 也是保存 JSON 数据,但会以更适合查询和处理的方式存储。
settings jsonb
在 PostgreSQL 里,如果你后续还想按 JSON 字段做查询、筛选和索引,通常更常见的是 jsonb。
CREATE TABLE products (id integer,name text,price numeric(10, 2),is_on_sale boolean DEFAULT false,created_at timestamp DEFAULT NOW(),meta jsonb);
这张表表达的是:
id:商品编号name:商品名称price:商品价格is_on_sale:是否在促销created_at:创建时间meta:扩展信息,比如颜色、标签、额外属性如果你以后要加主键、唯一约束、外键、索引,这些通常也是在表结构的基础上继续增强,而不是另起一套体系。
建完表之后,可以在 psql 中查看:
\dt
查看某张表的结构:
\d users
这两个命令很适合用来确认“表到底有没有创建成功”。
学习这一阶段时,重点不是背更多命令,而是建立下面这些直觉:
database 是更大的隔离单位schema 是数据库内部的逻辑分组table 才是日常真正存数据的地方下一篇会继续讲 schema 设计:什么时候只用 public 就够了,什么时候值得拆成多个 schema。