in 資訊文件

二個 postgresql 的 Tips

最近公司會用到 postgresql 來作為 Database ,不過因為之前都使用 Mysql 的 DB 設定和使用方法,所以有一些的不習慣,底下有二個我目前用到小技巧。

之前在 mysql 下,會使用 desc table 這個指令,來列出目前該 table 的 schema 有哪些。不過經由 postgresql 的 1.4. Accessing a Database 章節裡的使用者留言下說明,要用以下的方法來取代:

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SELECT column_name,data_type FROM information_schema.columns WHERE table_name = 'table_name'&amp;lt;br /&amp;gt;&lt;br /&gt;<br />

如果是 show table 這個指令,就得由以下的指令來取代:

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'&amp;lt;br /&amp;gt;&lt;br /&gt;<br />

另外由於我目前寫 php 時,都是經由 pdo 來存取 Database ,所以一般來說,我們都會使用 PDO::lastInsertId 來取得最後一筆插入的 ID ,不過因為 postgresql 並不支援該方法,所以會一直產生 false 的值。查了一下 php.net 的 PDO::lastinsertid 裡面的說明,他是改 select 一個 Sequences 的值,所以我依照我的需求改寫一下,就可以查出 last insert id 了。

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
prepare($query);&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    $temp_q_id-&amp;amp;amp;gt;execute();&amp;lt;/p&amp;gt;&lt;br /&gt;<br />
&amp;lt;p&amp;gt;    if($temp_q_id)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    {&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
        $temp_result = $temp_q_id-&amp;amp;amp;gt;fetch(PDO::FETCH_ASSOC);&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
        return ( $temp_result ) ? $temp_result['last_value'] : false;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    }&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
}&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
?&amp;amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />

當然在 php.net 上有更優雅的寫法,就是即時的分析 sql 字串,來找出 table ,但因為我的 pk 的鍵值都不一樣,所以才要自行作改寫了。

Write a Comment

Comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料