最近公司會用到 postgresql 來作為 Database ,不過因為之前都使用 Mysql 的 DB 設定和使用方法,所以有一些的不習慣,底下有二個我目前用到小技巧。
之前在 mysql 下,會使用 desc table 這個指令,來列出目前該 table 的 schema 有哪些。不過經由 postgresql 的 1.4. Accessing a Database 章節裡的使用者留言下說明,要用以下的方法來取代:
&lt;br /&gt;<br /><br /> SELECT column_name,data_type FROM information_schema.columns WHERE table_name = 'table_name'&lt;br /&gt;<br /><br />
如果是 show table 這個指令,就得由以下的指令來取代:
&lt;br /&gt;<br /><br /> SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'&lt;br /&gt;<br /><br />
另外由於我目前寫 php 時,都是經由 pdo 來存取 Database ,所以一般來說,我們都會使用 PDO::lastInsertId 來取得最後一筆插入的 ID ,不過因為 postgresql 並不支援該方法,所以會一直產生 false 的值。查了一下 php.net 的 PDO::lastinsertid 裡面的說明,他是改 select 一個 Sequences 的值,所以我依照我的需求改寫一下,就可以查出 last insert id 了。
&lt;br /&gt;<br /><br /> prepare($query);&lt;br /&gt;<br /><br /> $temp_q_id-&amp;amp;gt;execute();&lt;/p&gt;<br /><br /> &lt;p&gt; if($temp_q_id)&lt;br /&gt;<br /><br /> {&lt;br /&gt;<br /><br /> $temp_result = $temp_q_id-&amp;amp;gt;fetch(PDO::FETCH_ASSOC);&lt;br /&gt;<br /><br /> return ( $temp_result ) ? $temp_result['last_value'] : false;&lt;br /&gt;<br /><br /> }&lt;br /&gt;<br /><br /> }&lt;br /&gt;<br /><br /> ?&amp;amp;gt;&lt;br /&gt;<br /><br />
當然在 php.net 上有更優雅的寫法,就是即時的分析 sql 字串,來找出 table ,但因為我的 pk 的鍵值都不一樣,所以才要自行作改寫了。