频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

将你的程序从sqlserver改为PostgreSQL--1

来源: 作者: 出处:巧巧读书 2006-08-06 进入讨论组
QQRead:http://www.qqread.com/linux/2006/08/h324196061.html
  作者:运飞扬
  来自: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进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章