psql 中列出已经安装在数据库中的扩展有那些?

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

另请参阅

240270 次浏览

在psql中就是这样

\dx

详见PSQL手册

在普通SQL中,它将是pg_extension上的一个选择:

SELECT *
FROM pg_extension;

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

参见pg_available_extensionspg_available_extension_versions

这个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中

\dx

select extname from pg_extension ;

请记住

  1. 确保连接到正确的数据库。由于您的扩展是特定于数据库的加载。
  2. 根据定义,添加到template1数据库的任何扩展都将出现在所有数据库上。
在提取扩展信息之前,如果你直接从应用程序或驱动程序中使用查询从postgresql中提取这个信息,那么在后台运行的一些东西会很有帮助。 \dx为你从一个名为pg_extension, pg_namespace, pg_descriptionregclass的目录组合中提取信息

登录,进入下面提到的psql提示符:

psql -h localhost -d postgres -U username -E

使用-E开关,该开关提供了任何别名正在使用的隐藏命令的详细信息。一旦你是,你可以简单地做一个\dx

结果是这样的:

********* QUERY **********
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;
**************************


List of installed extensions
Name   | Version |   Schema   |         Description
---------+---------+------------+------------------------------
plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language

如果你要使用DBweaver或PGADMIN这样的客户端,那么斜杠命令可能不适合你,甚至在ORM的情况下也不行。在这里,您可以使用上面的命令,并获得有关postgres的扩展甚至任何其他别名命令的类似信息。