ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# oid2name ## Name oid2name --  解析PostgreSQL 数据目录里的 OID和文件节点 ## Synopsis `oid2name` [`_选项_`...] ## 描述 oid2nameoid2name 是一个帮助管理员检查PostgreSQL使用的文件结构的工具程序。要使用 这个工具,你必须熟悉数据库文件结构,在第58章描述 [Chapter 58](#calibre_link-1510). > **Note:** "oid2name" 很有历史了,但是实际上有相当的误导,,因为大多数你使用它的时候, 你将真正和的‘filenode numbers’(他们的文件名在数据库目录中是可见的)连接。 请确保你明白表的OID和表filenodes之间的区别 oid2name 连接到一个目标数据库并且提取OID,文件节点,和/或表名信息 你也可以展示数据库的OID和表空间的OID ## 选项 oid2name接收下面的命令行参数: `-f` `_filenode_` 展示文件节点是 `_filenode_`的表的信息 `-i` 在这个列表中包含索引和序列 `-o` `_oid_` 展示OID是 `_oid_`的表的信息 `-q` 省略表头(对脚本很有用) `-s` 展示表空间的OID `-S` 包含在( `information_schema`, `pg_toast` and `pg_catalog` schemas)里的系统对象 `-t` `_tablename_pattern_` 展示匹配`_tablename_pattern_`的表信息 `-V``--version` 打印 oid2name 版本并退出. `-x` 列出每一个被展示的对象的更多信息: tablespace name, schema name, and OID `-?` `--help` 显示关于 oid2name命令行的帮助信息和参数,并退出 oid2name在连接的时候也接受下面的命令行参数: `-d` `_database_` 连接哪台数据库 `-H` `_host_` 数据库服务器的地址 `-p` `_port_` 数据库服务器的端口 `-U` `_username_` 连接数据库的用户 `-P` `_password_` 密码(但是不建议这么做,因为把密码放在命令行存在安全隐患) 要展示特定的表, 选择要展示的数据库使用 `-o`, `-f` 和/或 `-t`. `-o` 需要一个 OID, `-f` 需要一个 filenode, `-t` 需要一个表名 (事实上,它是一个 `LIKE` 模式的, 所以你可以使用类似 `foo%`的参数). 只要你喜欢,你可以使用更多的选项,列表将包含所有的匹配这些选项的对象. 但是请注意这些选项只能展示`-d`指派的数据库里的对象. 如果你没有提供`-o`, `-f` or `-t`中的任何参数, 但是给了 `-d`参数, 它将列出以`-d`指派的数据库的所有的表. 在这种模式下,`-S` 和 `-i`选项控制着列表的显示内容. 如果你也没有指定 `-d` 它将展示数据库列表的 OID. 或者你可以通过`-s` 参数去得到表空间的列表 ## 注意 oid2name需要一个正在运行的且系统的catalogs没有被破坏的数据库服务器,因此,从遭受灾难性破坏的数据库中恢复数据,将会很有限。 ## 例子 ``` $ # 数据库服务器上都有哪些数据库? $ oid2name All databases: Oid Database Name Tablespace ---------------------------------- 17228 alvherre pg_default 17255 regression pg_default 17227 template0 pg_default 1 template1 pg_default $ oid2name -s All tablespaces: Oid Tablespace Name ------------------------- 1663 pg_default 1664 pg_global 155151 fastdisk 155152 bigdisk $ # 好,让我们进入alvherre数据库的目录 $ cd $PGDATA/base/17228 $ # 获取缺省表空间的前十个数据库对象,并且以size排序 $ ls -lS * | head -10 -rw------- 1 alvherre alvherre 136536064 sep 14 09:51 155173 -rw------- 1 alvherre alvherre 17965056 sep 14 09:51 1155291 -rw------- 1 alvherre alvherre 1204224 sep 14 09:51 16717 -rw------- 1 alvherre alvherre 581632 sep 6 17:51 1255 -rw------- 1 alvherre alvherre 237568 sep 14 09:50 16674 -rw------- 1 alvherre alvherre 212992 sep 14 09:51 1249 -rw------- 1 alvherre alvherre 204800 sep 14 09:51 16684 -rw------- 1 alvherre alvherre 196608 sep 14 09:50 16700 -rw------- 1 alvherre alvherre 163840 sep 14 09:50 16699 -rw------- 1 alvherre alvherre 122880 sep 6 17:51 16751 $ #我想知道155173这个文件是什么 $ oid2name -d alvherre -f 155173 From database "alvherre": Filenode Table Name ---------------------- 155173 accounts $ # 你也可以请求更多的对象 $ oid2name -d alvherre -f 155173 -f 1155291 From database "alvherre": Filenode Table Name ------------------------- 155173 accounts 1155291 accounts_pkey $ #你可以混合这些选项,通过-x获取更多的详细信息 $ oid2name -d alvherre -t accounts -f 1155291 -x From database "alvherre": Filenode Table Name Oid Schema Tablespace ------------------------------------------------------ 155173 accounts 155173 public pg_default 1155291 accounts_pkey 1155291 public pg_default $ # 展示每个数据库对象所占的磁盘空间 $ du [0-9]* | > while read SIZE FILENODE > do > echo "$SIZE `oid2name -q -d alvherre -i -f $FILENODE`" > done 16 1155287 branches_pkey 16 1155289 tellers_pkey 17561 1155291 accounts_pkey ... $ # 和上面一样,但是按照大小排序 $ du [0-9]* | sort -rn | while read SIZE FN > do > echo "$SIZE `oid2name -q -d alvherre -f $FN`" > done 133466 155173 accounts 17561 1155291 accounts_pkey 1177 16717 pg_proc_proname_args_nsp_index ... $ # 如果你想看表空间里有什么,使用 pg_tblspc 目录 $ cd $PGDATA/pg_tblspc $ oid2name -s All tablespaces: Oid Tablespace Name ------------------------- 1663 pg_default 1664 pg_global 155151 fastdisk 155152 bigdisk $ #数据库在 "fastdisk"表空间都有什么? ? $ ls -d 155151/* 155151/17228/ 155151/PG_VERSION $ # 这个数据库 17228 又是什么? $ oid2name All databases: Oid Database Name Tablespace ---------------------------------- 17228 alvherre pg_default 17255 regression pg_default 17227 template0 pg_default 1 template1 pg_default $ # 让我们看看这个数据库在表空间里都有什么 $ cd 155151/17228 $ ls -l total 0 -rw------- 1 postgres postgres 0 sep 13 23:20 155156 $ # 这个是一个很不错的小表,但是它是什么表呢? $ oid2name -d alvherre -f 155156 From database "alvherre": Filenode Table Name ---------------------- 155156 foo ``` ## 作者 B. Palmer `<[bpalmer@crimelabs.net](mailto:bpalmer@crimelabs.net)>`