PostgreSQL的硬傷

This post is written in Chinese. Please consider using Google Translate

PostgreSQL是一個強大的開源關係型數據庫,有着不少吸引人的特性,例如支持Bitmap索引、部份索引、異步IO、更穩定的ACID支持等等,但不可否認的是它有一個巨大的硬傷:對開發者和管理員不夠友好。

對開發者來說

  • 官方文檔不詳,尤其是缺乏樣例,許多函數令人不知所云。
  • 名字縮寫不統一,PG和PQ都常見。libpq中所有函數以PQ開頭,數據類型卻是PGconn,PGresult。
  • 沒有C++接口,libpq++本來好好的,PostgreSQL 8.0以後突然不見了。
  • 函數庫過於精簡,封裝過少,缺乏必要的語法糖。
  • PQexec, PQexecParams, PQprepare, PQexecPrepared函數返回的PGresult *指針必須被PQclear釋放,否則會內存泄露。
  • PQexecParams, PQexecPrepared裏面的paramValues參數如果要設置爲int, float之類,必須手動調用htonl函數轉換網絡字節序。
  • 在Windows下用VC編譯PostgreSQL如噩夢般可怕,不僅要配置非常複雜的編譯環境,還可能會遇到各種各樣奇怪的問題。
  • 在Windows下調用libpq無法使用靜態鏈接。

對管理員來說

  • DB Shell和系統Shell耦合,不少時候會帶來意想不到的麻煩。
  • 同樣是文檔不詳,配置複雜而且無參考。
  • 缺乏強大的圖形界面管理工具,pgAdmin不敢恭維。

和MySQL比起來,PostgreSQL是典型的學院派的作品,看過代碼就會發現,PostgreSQL寫得比MySQL優美無數倍。然而PostgreSQL之所以在產業界不成氣候,很大程度上是因爲它缺乏必要的商業支持,以至於沒有很強技術水平的人不敢輕易嘗試它,只能被束之高閣了。一個軟件的好壞不僅僅是其本身的功能的好壞所能決定的,還要看它的包裝如何,以及在其周圍是否產生了一個良性發展的生態圈。

Related posts