PostgreSQL自动完成?

21

是否有提供PostgreSQL自动完成功能的工具?我正在寻找类似于RedGate的SQLPrompt的工具。目前使用pgAdmin III的查询工具,但愿意考虑其他查询编辑器。


十年后...市面上有很多DBA工具。除了个人偏好之外,大多数IDE都有自己的Postgres插件,一些供应商(如IntelliJ与DataGrip或Microsoft与SQL Server Management Studio)也生产了一些非常好的商业工具用于数据库管理,可以与Postgres一起使用,并且拥有超过自动完成的功能。 但我认为最完整的免费开源工具之一是基于Eclipse的DBEaver,我已经在生产中使用了5年。 - Marco Carlo Moriggi
5个回答

14

psql支持此功能。我正在使用服务器版本8.2.6上的8.2.7版本。


7
我真傻,原来一直没有想到按下Ctrl+Space。 - phillipwei
我正在使用在Ubuntu上的psql 8.4.6和服务器版本8.4。ctrl-space对我不起作用,但ctrl-tab可以。 - user100464
1
对于Mac用户,需要安装readline库以实现自动补全(BREW命令:brew install readline)。 - suDocker
1
psql具有基本的自动补全功能。例如,如果您键入“SEL”并按Tab键,它将自动完成为“SELECT”。但是,它似乎无法自动完成列名。 - Flimm
无法在Windows上运行 (https://dba.stackexchange.com/a/310774/206847) - Marco Carlo Moriggi
1
在Windows上,CTL+spacepgAdmin查询工具中非常好用,但在psql中却不起作用。 - undefined

7
你可能会喜欢pgcli,它提供了连接和其他好用功能的自动完成。然而,它缺少一些像\dF...这样的助手。
cave> \d appellation
+-----------+---------+-----------------------------------------------------------+
| Column    | Type    | Modifiers                                                 |
|-----------+---------+-----------------------------------------------------------|
| id        | integer |  not null default nextval('appellation_id_seq'::regclass) |
| libelle   | text    |  not null                                                 |
| region_id | integer |                                                           |
+-----------+---------+-----------------------------------------------------------+
Indexes:
    "appellation_pkey" PRIMARY KEY, btree (id)
    "appellation_libelle_key" UNIQUE CONSTRAINT, btree (libelle)
Foreign-key constraints:
    "appellation_region_id_fkey" FOREIGN KEY (region_id) REFERENCES region(id) ON DELETE CASCADE
Referenced by:
    TABLE "vin" CONSTRAINT "vin_appellation_id_fkey" FOREIGN KEY (appellation_id) REFERENCES appellation(id) ON DELETE CASCADE

Time: 0.006s
cave> SELECT * FROM appellation JOIN  _
                                      region ON region.id = appellation.region_id     join      
                                      vin ON vin.appellation_id = appellation.id      join      

在这个例子中,提出了两个连接,对应于外键。

5

以下是简单的答案:

我花了很长时间尝试在psql客户端和SQL shell(psql)客户端上使tab补全功能正常。以下是解决方法:

停止尝试,使用此处找到的客户端:pgcli

我使用pip进行安装,并使用>pgcli -Upostgres打开客户端并输入与我安装Postgresql时创建的相同密码。Tab补全功能正常,我已经准备好了。


1
欢迎来到SO!在您发布答案之前,请先查看是否已有现有答案。(此选项已经提到) - David García Bodego

1
NetBeans的自动完成支持非常出色,比基本的psql好太多了。它能理解表别名,所以你可以这样做:

select * from users u join posts p where p.AUTOCOMPLETE

不幸的是,它不支持常用表达式。

重磅消息:Intellij支持CTE,而且更好用。我承认我错了。如果你只需要数据库功能,DataGrip就是Intellij的简化版。 - jdwyah

0

来自帮助文件:

要使用自动完成功能,请开始输入您的查询;当您希望查询编辑器建议可能是您查询中下一个对象名称或命令时,请按下Control+Space键组合。


帮助文件是针对pgAdmin而不是psql的。但在pgAdmin中工作得非常好。 - undefined

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