歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

將你的程序從sqlserver改為PostgreSQL--1

  作者:運飛揚  來自: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




Copyright © Linux教程網 All Rights Reserved