来源:http://whypro.github.io/hystars/misc/power-design-postgresql-reverse-engineering.html
首先说说系统环境,Windows 7 64 位系统,PowerDesigner 16.5,远程 PostgreSQL 9.4 数据库,JDK 为 64 位的 Java 8。
笔者依次点击: Database->Configure Connections...->Connection Profiles->Add Datasource
输入以下配置:
Connection type: JDBC DBMS type: PostgreSQL JDBC driver class: org.postgresql.Driver JDBC connection URL: jdbc:postgresql://<your_host>:5432/<your_database>
但是点击 Test connection 时出现了问题。
这个原因很简单,笔者安装的是 64 位的 JDK 和 JRE,而 Power Designer 是 32 位的,其 JDBC 无法在 64 位的 Java 虚拟机上运行。
从 Oracle 官网上下载 32 位的 JDK,安装时不要自动配置环境变量,因为笔者系统里的其他程序还要运行在 64 位虚拟机上,能不能只让 Power Designer 在 32 位虚拟机上运行呢?下一步将完美解决这个问题。
原因是找不到 PostgreSQL 的 Java 驱动。
访问 http://jdbc.postgresql.org/download.html,下载对应的 jar 包(笔者下载的是 postgresql-9.4.1208.jar)。
将下载下来的 jar 包放入某个目录,笔者放在了 D:ToolsSybasePowerDesigner 16SQL Anywhere 12 drivers 这个目录,当然你可以放到任意目录。
然后在 Power Designer 安装目录新建一个 PowerDesigner.bat 文件,输入以下内容:
set JAVA_HOME="C:\Program Files (x86)\Java\jdk1.8.0_77" set CLASSPATH="%JAVA_HOME%\lib\jt.jar;%JAVA_HOME%\lib\tools.jar;D:\Tools\Sybase\PowerDesigner 16\SQL Anywhere 12 drivers\postgresql-9.4.1208.jar" cd "D:\Tools\Sybase\PowerDesigner 16" start /b PdShell16.exe exit
其中 JAVA_HOME 是上一步安装的 32 位 JDK 的目录,CLASSPATH 包含那个 postgresql 的 Java 驱动 jar 包。
保存后,右键发送到桌面快捷方式即可,也可以给它换个图标,以后运行时双击这个快捷方式就可以了。
然而成功连接数据库后建模时出现了“不良的类型值问题”,解决方法如下:
依次点击
Database->Edit Current DBMS...->General Tab->PostgreSQL 9.x->Script->Objects
或者
Tools->Edit Current DBMS->PostgreSQL 9.x->Script->Objects
将 Column->SqlListQuery 选项里 SELECT 中的 c.attnotnull 替换为 cast(nullif(c.attnotnull, false) as varchar(1))
将 Key->SqlListQuery 选项里 SELECT 中的 x.indisprimary 替换为 cast(nullif(x.indisprimary, false) as varchar(1))
保存即可。
参考文章:
用PowerDesigner远程连接PostgreSQL数据库