[轉]Power Designer 連線 PostgreSQL 逆向工程若干問題
來源: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 時出現了問題。
Could not Initialize JavaVM!
原因分析
這個原因很簡單,筆者安裝的是 64 位的 JDK 和 JRE,而 Power Designer 是 32 位的,其 JDBC 無法在 64 位的 Java 虛擬機器上執行。
解決
從 Oracle 官網上下載 32 位的 JDK,安裝時不要自動配置環境變數,因為筆者系統裡的其他程式還要執行在 64 位虛擬機器上,能不能只讓 Power Designer 在 32 位虛擬機器上執行呢?下一步將完美解決這個問題。
Non SQL Error : Could not load class org.postgresql.Driver
原因分析
原因是找不到 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 包。
儲存後,右鍵傳送到桌面快捷方式即可,也可以給它換個圖示,以後執行時雙擊這個快捷方式就可以了。
Unable to list the columns. SQLSTATE = 22003不良的型別值 short : t
然而成功連線資料庫後建模時出現了“不良的型別值問題”,解決方法如下:
依次點選
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資料庫