作者:运飞扬 来自: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]