- 论坛徽章:
- 0
|
这些天,实验室的兄弟们要开发一个数据库应用,在我的坚持下选择了pg。应用中需要存放大量二进制大文件,按说没啥问题,但他们需要通过ODBC搞,按说还是没啥问题,可搞不定要我支持。
在网上一搜,找到了何伟平的帖子(http://www.linuxforum.net/docnew/showthreaded.php?Cat=&Board=faq&Number=257&page=0&view=collapsed&sb=5&o=all&fpart=),照猫画虎结果不灵。原来是版本太老,现在的处理机制有点变化。
执行下面的脚本会报错:
create type lo (
internallength=4, externallength=10,
input=int4in, output=int4out,
default='', passedbyvalue
);
用这段就没问题了:
CREATE FUNCTION lo_in(cstring)
RETURNS lo
AS 'int4in'
LANGUAGE 'internal' WITH (ISCACHABLE, ISSTRICT);
CREATE FUNCTION lo_out(lo)
RETURNS cstring
AS 'int4out'
LANGUAGE 'internal' WITH (ISCACHABLE, ISSTRICT);
CREATE TYPE lo(
internallength = 4,
externallength=10,
input = lo_in,
output = lo_out,
alignment = int4,
default = '',
passedbyvalue
);
CREATE CAST (lo AS oid) WITHOUT FUNCTION;
表里的大对象用新类型'lo'定义就OK了,PostgreSQL的ODBC驱动会将SQL_LONGVARBINARY映射为'lo'。其它的就直接用ODBC API就行了。
折腾了半天,想想干脆好人做到底,搞了一个VC的ODBC大对象访问demo。操作的数据表用下面的SQL创建:create guest(id int, name lo)。再一想,这种破事大家不必再浪费时间,所以demo程序我也一并放在帖子里了(就是下面的“图片”,下来后把文件扩展名改成rar,呵呵,不让上载rar文件,只好哄哄机器了)。 |
|