如何找到\data\base postgres文件夹的数据库名称?

3
我在我的Postgres安装文件夹下有一个容量为70GB的大文件夹,路径为:D:\Program Files\PostgreSQL\9.5\data\base\130205 问题:我该如何找出这个文件夹所对应的数据库? 我在同一台服务器上运行了大约10个数据库,其中大多数都有一个不同于此文件夹的表空间。
但很可能我错过了某些映射,比如一个大型索引之类的。我该如何找到这些数据“原因”的数据库?

这个数字是数据库的oid:https://www.postgresql.org/docs/current/static/storage-file-layout.html - user330315
4个回答

3
感谢@a_horse的提示,以下语句显示oid和表名:
``` SELECT oid,* from pg_database ```

1

只需以PostgreSQL操作系统用户身份运行oid2name即可。


这个命令在哪里?我正在运行9.5.20版本,但是以postgres用户身份在bash提示符下却显示找不到该命令。 - undefined
1
这是你的PostgreSQL二进制文件安装的位置。你可能没有将其添加到你的PATH环境变量中,所以你需要使用绝对路径来调用它。 - undefined
刚要说找不到,但我刚刚找到了——它在 /usr/bin/oid2name。由于某种原因,我的 pg 二进制文件存在于 /usr/bin 目录中。我刚才看到了 /usr/bin 中的 pgbench,哇!还有 oid2name 和其他一堆东西。谢谢。 - undefined
@JL_SO 你怎么会错过呢?肯定 /usr/bin 在你的路径上... - undefined

0

你可以使用以下查询来查找你最大的数据库的大小(取自这里):

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS SIZE
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

运行这个会得到:错误:无法统计文件“base/24593/146476”:权限被拒绝 SQL状态:42501 - undefined
你可能需要以数据库管理员的身份运行它。 - undefined
你需要为PostgreSQL数据目录停用病毒扫描器。 - undefined

0

您可以使用此语法。它从pg_databse中获取ID和数据库名称。

$ select pg_database.datname,pg_database.oid from pg_database;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接