作者:運飛揚 來自:yfy001.myetang.com 想把公司的程序從windows平台向Linux平台移植,就要考慮到數據庫的問題了,linux平台有兩個非常好的數據庫mysql和postgresql,考慮到產品的穩定性和數據庫的穩定性,並且程序中想使用存儲過程,所以我決定使用postgresql數據庫作為後台數據庫。 我以前曾經寫過一扁文章"將SQLSERVER的數據導入到postgresql中",為我這次的移植做好了基礎,現在要掌握新的內容就是如何使用postgresql的存儲過程和在qt程序中連接數據庫的問題而已。 在實際移植過程中,我發現了一個問題,我想用一個sql語句來創建我的數據庫和表的結構,但是我發現, sqlserver中這樣的一個語句: if exists (select * from sysobjects where id=object_id(N'[dbo].[DiaryPrice]) and OBJECTPROPERTY(id,N'IsUserTable') =1) drop table [dbo].[DiaryPrice] GO 這句的作用就是判斷如果數據庫中存在這樣一個表,就刪除的作用。這樣一句無法在postgresql中實現,我看了postgresql的文檔,沒有找到相關的實現語句,在sqlserver是可以的。 正好學習postgresql的PL/pgSQL語言,從Google上又搜索到這樣一個小函數,可以用來刪除一個已存在的表,好東西不敢獨享,寫篇文章做個紀錄。 首先,創建一個數據庫(我的是fexdbmaster), 如果你要使用某種過程語言,那麼你必須把它"安裝"到要用它的數據庫裡.不過那些安裝到 template1 數據庫裡的過程語言 會自動在隨後創建的數據庫中安裝.因此數據庫管理員可以決定哪個數據庫可以使用哪門語言,以及可以決定缺省時可以使用哪些語言. 對於那些隨著標准版本發布的語言,你可以使用 createlang shell 腳本而不用自己事無巨細地 自己做.我要使用PL/pgSQL,所以安裝PL/pgSQL到 template1 數據庫中,使用 createlang plpgsql template1 以下是這段程序的代碼: CREATE OR REPLACE FUNCTION drop_table_if_exists(text, bool) RETURNS bool AS ' DECLARE opt text; rec record; BEGIN IF $2 THEN opt := '' CASCADE''; ELSE opt := ''''; END IF; SELECT INTO rec oid FROM pg_class WHERE relname = $1::name; IF FOUND THEN EXECUTE ''DROP TABLE '' $1 opt; RETURN true; END IF; RETURN false; END; ' LANGUAGE 'plpgsql'; 你可以把這段代碼保存為一個文件,如ifexites 在控制台下使用psql -d fexdbmaster -f ifexites 就在這個數據庫裡注冊了這個函數。 以後,創建這個數據庫中的表的時候,可以直接使用這個函數了。兩個創建表的腳本如下: SELECT drop_table_if_exists('fivemprice', false); CREATE TABLE FiveMPrice ( FiveMPriceId SERIAL, ETypeId smallint NOT NULL, UpDateTime timestamp NOT NULL, OpenPrice varchar(50) NULL, ClosePrice varchar(50) NULL, MaXPrice varchar(50) NULL, MinPrice varchar(50) NULL, TrCurDateTime timestamp NULL ); SELECT drop_table_if_exists('exchangetype', false); CREATE TABLE ExchangeType ( ETypeId SERIAL, ETypeCode varchar(50) NOT NULL, EnglishName varchar(50) NOT NULL, ChineseName varchar(50) NULL, Desciption varchar(50) NULL, CreateDateTime timestamp NULL ); 此腳本可存儲為test.sql 控制台下運行psql -d fexdbmaster -f test.sql就可以了.本人水平有限,望大俠們多多指教! 相關鏈接 · 更多的有關 K-數據庫-postgresql · 新聞提供 yfy002 -------------------------------------------------------------------------------- 人氣最高的文章在 K-數據庫-postgresql: 將你的程序從sqlserver改為PostgreSQL--1