使用 psql 如何列出安装在数据库中的扩展?

Posted

技术标签:

【中文标题】使用 psql 如何列出安装在数据库中的扩展?【英文标题】:Using psql how do I list extensions installed in a database? 【发布时间】:2014-03-15 00:43:03 【问题描述】:

如何从 psql 列出已安装在数据库或架构中的所有扩展?

另见

Finding a list of available extensions that PostgreSQL ships with

【问题讨论】:

【参考方案1】:

在 psql 中

\dx

详情请参阅manual of psql。

在纯 SQL 中执行此操作将是 pg_extension 上的选择:

SELECT * 
FROM pg_extension;

【讨论】:

@SoichiHayashi:那么您可能使用的是旧的 Postgres 版本 我正在运行 PostgreSQL 服务器 9.3.5,但我使用的是 CentOS 6.5 附带的 psql 客户端 8.4.20。也许我需要安装最新版本的 psql? @SoichiHayashi \dx 是一个 psql 命令,在 create extension 功能发布时在 9.0 中引入。所以是的,您还需要升级您的psql(您应该始终使用与您的数据库版本匹配的psql 版本) 多么讽刺。 ***.com/questions/9463318/… 其中一个 cmets 是这样的问题(以及一般无法做真正困难的事情,如 \?)会惹恼 a_horse_with_no_name :D。公平地说,这个答案包含其他有用的信息。 您可能会提到该列表的完整 SQL 查询:select * from pg_extension【参考方案2】:

另外,如果您想知道您的服务器上有哪些扩展可用:SELECT * FROM pg_available_extensions

请参阅 pg_available_extensionspg_available_extension_versions

【讨论】:

【参考方案3】:

这个 SQL 查询给出的输出类似于\dx:

SELECT e.extname AS "Name", e.extversion AS "Version", n.nspname AS "Schema", c.description AS "Description" 
FROM pg_catalog.pg_extension e 
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace 
LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass 
ORDER BY 1;

感谢https://blog.dbi-services.com/listing-the-extensions-available-in-postgresql/

【讨论】:

psql(1) 反斜杠命令在 SQL 中实现;他们就像一个别名。要查看为每个反斜杠命令(例如 \dx)执行的 SQL,请执行 \set ECHO_HIDDEN on

以上是关于使用 psql 如何列出安装在数据库中的扩展?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 的命令行工具 psql 的常用命令

如何使用 psql 从 postgres 中的数据库切换?

我们如何在不使用 `psql` 的命令或选项的情况下显示集群中的所有数据库? [复制]

如何使用psql中表中的列列表检索数据

如何在 psql 中切换数据库?

psql - 将命令结果保存到文件中