postgres 查询哪些创建的表使用了系统参数oid
时间: 2024-11-15 21:27:42 浏览: 27
在PostgreSQL中,你可以通过查询pg_class系统表来查看哪些表使用了oid(对象标识符)。oid是PostgreSQL用于唯一标识数据库对象的关键字段。下面是一个SQL查询示例:
```sql
SELECT table_name
FROM pg_class
WHERE relkind = 'r' AND indisprimary AND NOT EXISTS (
SELECT 1
FROM pg_index
WHERE indexrelid = pg_class.oid
)
AND obj_description(pg_class.oid, 'pg_class') LIKE '%oids%';
```
这个查询做了以下几件事:
1. `relkind = 'r'` 确保我们只看普通表(不是视图、索引等其他类型的数据库对象)。
2. `indisprimary` 挑选主键表,因为通常只有主键才关联oid。
3. `NOT EXISTS (pg_index...)` 排除有索引的表,因为它们可能不需要显式oid。
4. `obj_description(pg_class.oid, 'pg_class') LIKE '%oids%'` 搜索pg_class表的描述信息,查找包含"oids"的行,这通常是表使用oid的标志。
运行此查询后,结果将列出使用了oid的表名。
相关问题
postgres表空间
### PostgreSQL 表空间使用指南
#### 创建表空间
为了创建一个新的表空间,在PostgreSQL中可以利用`CREATE TABLESPACE`命令。此命令允许指定新的表空间名称以及该表空间所对应的文件系统位置。例如:
```sql
CREATE TABLESPACE my_tablespace LOCATION '/path/to/tablespace';
```
这行代码会创建名为 `my_tablespace` 的新表空间,并将其物理存储设置到 `/path/to/tablespace` 路径下[^1]。
#### 查看现有表空间
要查看当前数据库实例中存在的所有表空间,可执行如下查询:
```sql
SELECT spcname AS tablespace_name, oid FROM pg_tablespace;
```
这段 SQL 查询返回的结果集中包含了每一个已定义表空间的名字及其内部对象标识符(oid)。
#### 设置默认表空间
当创建新表或其他持久化对象时,默认情况下它们会被放置在一个特定的表空间内。可以通过更改配置参数 `default_tablespace` 来改变这个行为:
```sql
SET default_tablespace = 'my_tablespace';
```
上述指令将使后续创建的对象自动关联至 `my_tablespace` ,除非另有说明。
#### 更改已有对象所属表空间
虽然无法直接修改现有的表空间属性(如存储路径),但能够迁移已经存在的关系(比如表)到另一个不同的表空间里去。这一过程涉及先建立临时副本再删除源数据的方法实现转移目的;或者采用更简便的方式——通过 `ALTER TABLE ... SET TABLESPACE` 命令完成转换工作:
```sql
ALTER TABLE my_table SET TABLESPACE new_tablespace;
```
这条语句指示服务器把 `my_table` 及其索引移动到目标表空间 `new_tablespace` 中。
阅读全文