当前位置: 首页 > news >正文

pg入门3—详解tablespaces2

pg默认的tablespace的location为空,那么如果表设置了默认的tablespace,数据实际上是存哪个目录的呢?

在 PostgreSQL 中,如果你创建了一个表并且没有显式指定表空间(tablespace),或者表空间的 location 为空,数据将存储在数据库集群的默认数据目录中。这是 PostgreSQL 的数据存储默认行为。

1. 默认表空间和默认位置

PostgreSQL 有一个默认的表空间,叫 pg_default,它并没有设置显式的物理位置。当你没有指定表空间时,数据会被存储在 pg_default 表空间下。pg_default 表空间的位置实际上指向 PostgreSQL 数据目录下的 base 目录。

  • PostgreSQL 的数据目录通常是在初始化数据库集群时通过 initdb 指定的,或者在 PostgreSQL 的配置文件 postgresql.conf 中通过 data_directory 参数设置。
  • pg_default 表空间默认情况下会指向这个数据目录的 base 目录。

2. 数据存储位置

数据的存储位置具体在数据目录下的 base 目录中。每个数据库都有一个对应的 OID(对象标识符),在 base 目录中会有一个与数据库 OID 对应的子目录。表的数据最终会存储在该子目录中。

例如

  • 假设你的 PostgreSQL 数据目录是 /var/lib/postgresql/data/,那么:
    • 默认表空间 pg_default 指向的路径将是 /var/lib/postgresql/data/base/
    • 每个数据库会在 base 目录下有一个子目录,该子目录的名字是该数据库的 OID。

3. 如何查看数据库的 OID

你可以通过以下 SQL 查询来查看数据库的 OID:

SELECT oid, datname FROM pg_database;

每个数据库在 base 目录下的子目录名就是这个 OID。

4. 举例说明

假设 PostgreSQL 的数据目录位于 /var/lib/postgresql/data/,且你在名为 mydb 的数据库中创建了一张表,而没有指定表空间。那么:

  • PostgreSQL 会在 /var/lib/postgresql/data/base/ 中创建一个名为 mydb 数据库 OID 对应的子目录。
  • 该表的数据文件会保存在这个 OID 子目录下。

因此,即便你没有设置表空间或者 location 为空,数据仍然会被存储在 PostgreSQL 数据目录下的相应位置中。


http://www.mrgr.cn/news/30581.html

相关文章:

  • RK3568平台(网络篇)MAC地址烧录
  • 【LabVIEW】事件结构的用法
  • 消息队列-Kafka(概念篇)
  • 小琳AI课堂:强化学习初阶
  • OJ在线评测系统 前端开发设计优化通用菜单组件二 调试用户自动登录
  • JavaFX实现视频播放功能
  • SPI接口通信协议浅谈成都自动化开发
  • yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】
  • Linux 后台运行服务的全攻略:nohup、screen、tmux 和 systemd 的实战指南
  • (笔记)mac笔记本调节键盘速率
  • 【大模型开发】 迎接AI新时代:Qwen2.5发布,超越LLaMA3!本地私有化部署:如何通过一键API调用不同模型?(附源码地址)
  • C++——求3个数中最大的数(分别考虑整数、双精度数、长整数的情况),用函数模板来实现。
  • 前端框架对比和选择
  • 6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
  • chapter16-坦克大战【1】——(自定义泛型)——day21
  • JZ2440开发板——S3C2440的存储控制器
  • C++ prime plus-3-编程练习
  • C++标准的一些特性记录:C++11的auto和decltype
  • 每天五分钟深度学习框架pytorch:pytorch中已经定义好的损失函数
  • 【洛谷】P1546 [USACO3.1] 最短网络 Agri-Net 的题解