Oracle SQL Developer和PostgreSQL

77
我正在尝试使用Oracle SQL Developer 3.0.04连接到一个PostgreSQL 9.1数据库,但是迄今为止我没有成功。
首先,在偏好设置中添加第三方驱动程序后,添加新连接时没有针对PostgreSQL的选项卡(对于MySQL则正常工作)。我使用的是JDBC4版本9.1驱动程序,但我尝试了相同版本的JDBC3仍然无法解决问题。
其次,在添加新连接时没有类似手动配置的选项卡。最接近的是Oracle选项卡上的高级选项,我可以提供自定义URL,但它会因为所选驱动程序而失败(当然)。
最后,我通过从XML文件导入连接来连接,但它仅显示我的模式,并不显示其中的表格。
所以,我的问题是:Oracle SQL Developer支持PostgreSQL连接吗?是否有其他方式可以在ObjectViewer中显示我的表格?
<?xml version = '1.0' encoding = 'UTF-8'?>
<References xmlns="http://xmlns.oracle.com/adf/jndi">
    <Reference name="Lumea" className="oracle.jdeveloper.db.adapter.DatabaseProvider" credentialStoreKey="Lumea" xmlns="">
        <Factory className="oracle.jdeveloper.db.adapter.DatabaseProviderFactory"/>
        <RefAddresses>
            <StringRefAddr addrType="user">
                <Contents>lumea</Contents>
            </StringRefAddr>
            <StringRefAddr addrType="subtype">
                <Contents>thirdParty</Contents>
            </StringRefAddr>
            <StringRefAddr addrType="customUrl">
                <Contents>jdbc:postgresql://localhost:5432/versates</Contents>
            </StringRefAddr>
            <StringRefAddr addrType="SavePassword">
                <Contents>true</Contents>
            </StringRefAddr>
            <StringRefAddr addrType="password">
                <Contents>myencryptedpass</Contents>
            </StringRefAddr>
            <StringRefAddr addrType="driver">
                <Contents>org.postgresql.Driver</Contents>
            </StringRefAddr>
            <StringRefAddr addrType="DeployPassword">
                <Contents>true</Contents>
            </StringRefAddr>
        </RefAddresses>
    </Reference>
</References>
10个回答

186
Oracle SQL Developer 4.0.1.14确实支持与PostgreSQL的连接。

编辑:

如果您的用户名和数据库名称不同,应该在主机名中指定:hostname/database?(不要忘记?)或hostname:port/database?

感谢 @kinkajou 和 @Kloe2378231(更多详细信息请参见 https://dev59.com/q2Ei5IYBdhLWcg3whcri#28671213)。

1
除非您的用户名和数据库名称不同,否则它将无法工作。这听起来像是SQLDeveloper的一个错误,我找不到任何解决方法。 - Kloe2378231
在我早先的评论中,我也解释了这个解决方法,与他所说的完全一样。 - John O
1
在主机名字段中需要填写 localhost/database? - kinkajou
7
简而言之,如果您的用户名和数据库名称不同,应在主机名中指定:“hostname/database?”(不要忘记“?”)或“hostname:port/database?”(有关更多详细信息,请参见https://dev59.com/q2Ei5IYBdhLWcg3whcri#28671213)。 - Robert Lujo
1
起初我无法连接,看到“选择数据库”在下拉框中没有显示。这里有一个解决方法,将数据库名称放在用户名的位置上,然后进行测试。如果成功了,那么你会看到“选择数据库”下拉框启用了,你可以看到很多数据库。选择你想要的任何一个,然后输入实际的用户名并进行测试,它会成功的。 - Ankur Srivastava
显示剩余4条评论

15

我刚下载了适用于OS X(10.9)的SQL Developer 4.0,它刚刚退出了测试版。我还下载了最新的Postgres JDBC jar。出于好奇,按照与SQL Dev中其他第三方数据库驱动程序相同的方法安装了它,并成功安装。现在每当我点击“新建连接”,就会出现一个Postgres选项卡...点击它会显示一个面板,要求提供数据库连接详细信息。

这个问题的答案已经改变,无论是否支持,它似乎都可以工作。有一个“选择数据库”按钮,如果点击它,会显示一个下拉列表,其中包含可用的postgres数据库。创建连接后,打开它,它会列出该数据库中的模式。大多数postgres命令似乎都可以工作,但没有psql命令(\list等)。

那些需要一个单一工具连接到多个数据库引擎的人现在可以使用SQL Developer。


您需要使用特殊语法来填写任何字段吗?还是只需按照主机名/端口/用户名/密码的格式填写即可?当我尝试时,我收到了“数据库x不存在”的错误提示,其中x是我在用户名字段中输入的内容。 - Jordan Parmer
@JordanParmer 默认情况下,它期望数据库名称与用户相同。但是,如果您单击测试按钮,我可以让它填充下载列表。嗯,我想我记错了,您可能还需要先创建同名的数据库,然后才能填充列表。如果您仍然有问题,请回复,我将尝试复制我使用的方法并将其添加到答案中。 - John O
我和Jordan有同样的问题。我的用户名与我想连接的数据库不同。有什么想法吗? - Neets
2
你需要创建一个与你的用户名相同的数据库。它可以为空,这样可以让你看到其他可连接的数据库...然后其他数据库会出现在列表中并且可以选择。虽然有些尴尬,但现在是一个相当无痛的解决方法。 - John O
1
我们按照上述描述在4中添加了支持,但它还没有得到官方支持,也就是说这是一个未记录的功能。关键词是“yet”。与所有其他第三方数据库支持平台一样,我们添加它们是为了帮助您将数据库和应用程序迁移到Oracle。 - thatjeffsmith
显示剩余2条评论

7

21
不再正确。SQL开发工具支持Postgres版本>=4。 - oligofren

4
如果没有与用户名相同的数据库,则单击“选择数据库”将失败,并显示类似于“状态:失败-FATAL:数据库“your_username”不存在”的错误信息。为了解决这个问题,在端口字段中输入5432/database_name?,其中5432是你的Postgres实例的端口号,database_nameyour_username有访问权限的现有数据库的名称。然后再次单击“选择数据库”,应该就可以了。现在,您可以选择所需的数据库并从端口字段中删除额外的/database_name?

3
我成功地使用SQL Developer连接到了Postgres数据库。 我下载了Postgres JDBC驱动程序并保存在一个文件夹中。 我运行SQL Developer -> 工具 -> 首选项 -> 搜索 -> JDBC 我为数据库和数据建模器(可选)定义了Postgres JDBC驱动程序。
这是一个技巧。 在创建新的连接时,将主机名定义为localhost/crm?其中crm是数据库名称。测试连接,一切正常。

2

我认为这个问题需要更新的答案,因为自从最初提出以来,PostgreSQL和SQLDeveloper已经多次更新。

我在Azure上运行了一个SSLMODE = Require的PostgreSQL实例。虽然我一直在使用DBeaverCE访问该实例并生成ER图,但我已经非常熟悉SQLDeveloper,它现在已经更新到v19.4。

关于下载最新的PostgreSQL JDBC驱动程序以及放置位置的说明是正确的。然而,改变的是配置DB访问的位置。

您将找到一个文件$HOME/.sqldeveloper/system19.4.0.354.1759/o.jdeveloper.db.connection.19.3.0.354.1759/connections.json

{
  "connections": [
    {
      "name": "connection-name-goes-here",
      "type": "jdbc",
      "info": {
        "customUrl": "jdbc:postgresql://your-postgresql-host:5432/DBNAME?sslmode=require",
        "hostname": "your-postgresql-host",
        "driver": "org.postgresql.Driver",
        "subtype": "SDPostgreSQL",
        "port": "5432",
        "SavePassword": "false",
        "RaptorConnectionType": "SDPostgreSQL",
        "user": "your_admin_user",
        "sslmode": "require"
      }
    }
  ]
}

您可以将此连接用于Data Modeller和SQLDeveloper的管理功能。在自定义URL中指定所有端口、数据库名称和sslmode是必需的,因为SQLDeveloper没有在通过JDBC发送的内容中包含sslmode,所以您必须手动构建它。


1
我将我的用户名放在“用户名”字段中(没有密码),然后点击“选择数据库”,以获取要填充的数据库列表。如果用户名字段为空,这种方法将不起作用,我只能通过这种方式连接到我的用户数据库。
(这是使用SQL Developer 4.0.0.13、Postgres.app 9.3.0.0和postgresql-9.3-1100.jdbc41.jar进行的,供参考。)

你能提供一步一步安装postgresql-9.3-1100.jdbc41.jar的方法吗?遵循Postgresql文档可能有点简略。我对Java JDBC还不熟悉。 - Charlesliam
@Charlesliam,我写了一篇关于我所做的事情的快速博客文章:http://substars.github.io/2014/01/06/oracle-sql-developer-and-postgres。我使用的是OSX,但其他平台应该大致相同。 - substars
希望使用相同的方式连接到Redshift数据库,因为它使用Postgres驱动程序。但是,由于使用不同的用户名和密码,它无法为我填充数据库。 - Rakesh Singh

1
Oracle SQL Developer 2020-02支持PostgreSQL,但只是通过在JDBC目录下添加PostgreSQL驱动程序并将其作为第三方驱动程序配置来实现基础功能。
支持的功能包括:
- 多个数据库可以在连接定义中选择 - CRUD操作,如查询表 - 模式操作 - 基础建模支持:显示没有主键、外键和连接的表
不支持的功能包括:
- 没有表或字段自动完成 - 没有在选项卡中显示索引 - 没有在选项卡中显示约束,如外键、主键、唯一性或其他 - 编辑器中没有表或字段自动完成 - 不显示函数、软件包、触发器、视图等
令人遗憾的是,对于PostgreSQL连接,Oracle只需要更改这个视图后面的查询。例如,对于索引,他们需要使用此查询:select * from pg_catalog.pg_indexes;

0

如果您需要模式/数据库,请使用host=localhost/postgres?currentSchema=myschema

例如:localhost/postgres?currentSchema=public

连接后,您还可以使用[选择数据库]按钮并下拉

sql developer postgres jdbc url for the rest of us

对我有用的是host=localhost/postgres?


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0
除非您的用户名和数据库名称不同,否则它将无法工作。这听起来像是SQLDeveloper的一个错误,我找不到任何解决方法。
也许在连接到PostgreSQL时Oracle SQL Developer存在一些错误。然而,我使用Navicat成功地连接了PostgreSQL。(我的PostgreSQL用户名和数据库名称不同)

解决方案:如果您的用户名和数据库名称不同,那么应该在主机名中指定:hostname/database?(不要忘记问号)或者hostname:port/database?。 - Mike Liu
1
“当我使用Navicat时”如何成为解决“它与SQL Developer不能正常工作”的问题的方案? - user330315

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