当前位置:Linux教程 - Linux资讯 - 将你的程序从sqlserver改为PostgreSQL--1

将你的程序从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
[1] [2] 下一页 

(出处:http://www.sheup.com)


上一页 [1] [2]