pgsql怎么存储json
时间: 2025-02-10 21:04:19 浏览: 53
### 存储 JSON 数据于 PostgreSQL
在 PostgreSQL 中,支持两种用于存储 JSON 数据的原生数据类型:`json` 和 `jsonb`。这两种类型的定义和操作方式有所不同。
#### 创建带有 JSON 列的表格
为了创建一个能够容纳 JSON 或者 JSONB 数据的表单,可以使用如下 SQL 命令:
对于 `json` 类型:
```sql
CREATE TABLE example_json (
id serial PRIMARY KEY,
data json NOT NULL
);
```
而对于 `jsonb` 类型,则有稍微不同的声明方法:
```sql
CREATE TABLE example_jsonb (
id serial PRIMARY KEY,
data jsonb NOT NULL
);
```
#### 插入 JSON 数据
向上述任一表中插入 JSON 数据可以通过简单的 `INSERT` 语句完成。这里展示了一个具体的例子来说明这一点[^3]:
```sql
INSERT INTO example_json (data) VALUES ('{"name": "Alice", "age": 28}');
INSERT INTO example_jsonb (data) VALUES ('{"city": "Beijing", "country": "China"}');
```
#### 查询 JSON 数据
当涉及到检索这些表内的信息时,可以根据键名访问特定字段的内容。例如,要获取所有记录的名字属性,可执行下面这条命令:
```sql
SELECT data->>'name' AS name FROM example_json;
```
同样的逻辑也适用于 `jsonb` 表格的操作。
#### 更新 JSON 数据
更新已存在的 JSON 文档同样简单明了。假设想要修改某个用户的年龄值,那么就可以这样做:
```sql
UPDATE example_json SET data = jsonb_set(data, '{age}', '35') WHERE id = 1;
```
请注意,在此上下文中使用的函数是 `jsonb_set()` 而不是普通的 `json` 函数版本,这是因为即使是在处理 `json` 类型的数据时,推荐的做法也是先将其转换成 `jsonb` 来利用更高效的索引机制和其他优化特性[^4]。
#### 删除 JSON 数据
删除整个文档或其中的一部分也可以通过标准的SQL语法实现。比如移除一条完整的记录:
```sql
DELETE FROM example_json WHERE id = 1;
```
或者仅清除掉某些子项而不影响其他部分:
```sql
UPDATE example_json SET data = data #- '{address}' WHERE id = 2;
```
#### 关于 `json` vs. `jsonb`
两者之间的核心差异在于内部表示法及其对性能的影响。具体来说:
- **解析开销**:每当读取 `json` 字段的时候都会重新解析其内容;而 `jsonb` 只会在首次加载时被解析一次,并以后续二进制形式保存下来。
- **空间效率**:由于去除了重复键并规范化了白空间,通常情况下 `jsonb` 占用的空间会小于原始输入字符串所对应的 `json` 版本。
- **功能集**:尽管二者都提供了丰富的查询选项,但是只有 `jsonb` 支持构建 GIN 索引来加速复杂路径表达式的匹配过程。
综上所述,选择哪种类型取决于实际需求——如果追求更高的灵活性以及更快捷的写入速度,应该考虑采用 `json`;反之则倾向于选用经过高度优化过的 `jsonb` 形式来进行大规模数据分析工作负载下的高效存取活动。
阅读全文
相关推荐


















