这是我的问题的一个简单示例:
CREATE TABLE test1 (id SERIAL, key TEXT UNIQUE, value TEXT);
CREATE TABLE test2 (id SERIAL, key TEXT UNIQUE, value TEXT);
INSERT INTO test1 (key, value)
SELECT i::TEXT, 'ABC' || i::TEXT
FROM generate_series(0, 1000000) AS i;
INSERT INTO test2 (key, value)
SELECT i::TEXT, 'ABC' || (i+1000)::TEXT
FROM generate_series(0, 600000) AS i;
INSERT INTO test2 (key, value)
SELECT i::TEXT, 'ABC' || (i+1000)::TEXT
FROM generate_series(1000000, 1200000) AS i;
CREATE INDEX test1_key ON test1 (key);
CREATE INDEX test1_value ON test1 (value);
CREATE INDEX …Run Code Online (Sandbox Code Playgroud) 我们有一个应用程序通过psqlodbc 09.00.0200驱动程序从PostgreSQL 9.0.3数据库获取一些数据,方法如下:
1)SQLExecDirect,带有START TRANSACTION
2)SQLExecDirect
DECLARE foo SCROLL CURSOR FOR
SELECT table.alotofcolumns
FROM table
ORDER BY name2, id LIMIT 10000
Run Code Online (Sandbox Code Playgroud)
3)SQLPrepare用
SELECT table.alotofcolumns, l01.languagedescription
FROM fetchcur('foo', ?, ?) table (column definitions)
LEFT OUTER JOIN languagetable l01 ON (l01.lang = 'EN'
AND l01.type = 'some type'
AND l01.grp = 'some group'
AND l01.key = table.somecolumn)
[~20 more LEFT OUTER JOINS in the same style, but for an other column]
Run Code Online (Sandbox Code Playgroud)
4)SQLExecute,其中param1设置为SQL_FETCH_RELATIVE,param2设置为1
)SQLExecute,param1设置为SQL_FETCH_RELATIVE,param2设置为-1
6)SQLExecute,param1设置为SQL_FETCH_RELATIVE,param2设置为0
7)取消分配全部,关闭游标,结束事务
函数fetchcur执行FETCH RELATIVE $3 IN $1 …