二個 Postgresql 的 Tips

最近公司會用到 postgresql 來作為 Database ,不過因為之前都使用 Mysql 的 DB 設定和使用方法,所以有一些的不習慣,底下有二個我目前用到小技巧。 之前在 mysql 下,會使用 desc table 這個指令,來列出目前該 table 的 schema 有哪些。不過經由 postgresql 的 1.4. Accessing a Database 章節裡的使用者留言下說明,要用以下的方法來取代: [code lang=“sql”]<br />

SELECT column_name,data_type FROM information_schema.columns WHERE table_name = ’table_name’<br />

[/code] 如果是 show table 這個指令,就得由以下的指令來取代: [code lang=“sql”]<br />

SELECT table_name FROM information_schema.tables WHERE table_schema = ‘public’<br />

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

prepare($query);<br />

$temp_q_id-&amp;gt;execute();</p>

<p> if($temp_q_id)<br />

{<br />

$temp_result = $temp_q_id-&amp;gt;fetch(PDO::FETCH_ASSOC);<br />

return ( $temp_result ) ? $temp_result[’last_value’] : false;<br />

}<br />

}<br />

?&amp;gt;<br />

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