Como criar uma fonte de dados ODBC para uso com PostgreSQL
- Iniciar o ODBC Data Source Administrator,
- Execute
%WinDir%\System32\odbcad32.exe
. - Execute
%WinDir%\SysWoW64\odbcad32.exe
- para TOTVS | DBAccess 32 bits em sistemas operacionais 64 bits.
- Execute
- Crie uma nova fonte de dados.
Utilize o driver PostgreSQL ANSI.
- Altere a nova fonte de dados de acordo com suas informações de acesso ao banco e:
- Marque a opção Recognize Unique Indexes.
- Desmarque a opção Use Declare/Fetch.
- No grupo Unknown Sizes, selecione a opção Longest.
- No grupo Data Type Options, marque a opção Text as LongVarchar.
- No grupo Data Type Options, marque a opção Bools as Char.
- No grupo Miscellaneous, em Max LongVarchar, informe 2000.
- Desmarque a opção Read Only.
- Desmarque a opção Row Versioning.
- Desmarque a opção Show System Tables.
- Marque a opção LFConversion.
- No grupo OID Options, desmarque a opção Show Column.
- No grupo OID Options, demarque a opção Fake Index.
- Marque a opção Server side prepare.
- Marque a opção bytea as LO
- Salve a fonte de dados.
Configuração Use Declare / Fetch
A ODBC do Postgres por default sempre recebe o result-set inteiro de qualquer query aberta. Quando usamos essa configuração habilitada (UseDeclareFetch=1), a ODBC encapsula a query declarando um cursor no banco de dados, e trazendo blocos de 100 registros por vez. Esse encapsulamento pode interferir em queries que façam por exemplo WITH ( CTE ) AS (SELECT) INSERT INTO (X) SELECT FROM CTE.
Atualmente, o único caso onde é recomendável usar essa configuração com o valor 1 (habilitada), é quando vamos utrilizar o DBTOOLS para migrar os dados de um banco de origem POSTGRES para outro Database. A leitura da tabela inteira pelo DBTools para fazer a cópia pode elevar consideravelmente a memória do DBACCess neste processo, dependendo do tamanho da tabela envolvida.