psqlODBC Configuration Options

Advanced Options 1/2 Dialog Box

DEFAULTS

Press this button to restore the normal defaults for the settings described below.

Disable Genetic Optimizer

Automatically turns off the backend genetic optimizer at connection time. This is a convenience feature rather than having to type it in the connect settings. This feature was added when we noticed the backend seemed to have big problems optimizing some queries.

KSQO (Keyset Query Optimization)

Deprecated for 7.1+ servers. Check this option when connecting 7.0- servers and the application seems to be suffering from the following kind of queries:

SELECT ... 
  FROM ...
 WHERE ( a=1 AND b=1 AND c=1 )
    OR ( a=1 AND b=1 AND c=2 )
This code block illustrates a where condition that may benefit from setting KSQO option.

Recognize Unique Indexes

Check this option.

Use Declare/Fetch

If true, the driver automatically uses declare cursor/fetch to handle SELECT statements and keeps 100 rows in a cache. This is mostly a great advantage, especially if you are only interested in reading and not updating. It results in the driver not sucking down lots of memory to buffer the entire result set. If set to false, cursors will not be used and the driver will retrieve the entire result set. For very large tables, this is very inefficient and may use up all the Windows memory/resources. However, it may handle updates better since the tables are not kept open, as they are when using cursors. This was the style of the old podbc32 driver. However, the behavior of the memory allocation is much improved so even when not using cursors, performance should at least be better than the old podbc32.

Parse Statements

Tell the driver how to gather the information about result columns of queries. See also Disallow Premature and ServerSide Prepare options. The driver checks this option first.

If disabled then it checks the Server Side Prepare option. If disabled also it checks the Disallow Premature option. If neither of them is specified the driver would execute the prepared statement prematurely when the application inquires the result columns' info. If this option is enabled, the driver will parse an SQL query statement to identify the columns and tables and gather statistics about them such as precision, nullability, aliases, etc. It then reports this information in SQLDescribeCol, SQLColAttributes, and SQLNumResultCols.

If the parser can not deal with a column (because it is a function or expression, etc.), it will fallback to executing the statement which is the old style of getting the info. The parser is fairly sophisticated and can handle many things such as column and table aliases, quoted identifiers, literals, joins, cross-products, etc. It can correctly identify a function or expression column, regardless of the complexity, but it does not attempt to determine the data type or precision of these columns.

Cancel as FreeStmt

CommLog

Log communications to/from the backend to that file. This is good for debugging problems. The file name for the log follows the naming convention psqlodbc_xxxx.log.

MyLog

Log debug messages to that file. This is good for debugging problems with the driver. The file name for this log follows the naming convention mylog_xxx.log.

Unknown Sizes

This controls what SQLDescribeCol and SQLColAttributes will return as to precision for character data types (varchar, text, and unknown) in a result set when the precision is unknown.

Maximum
Always return the maximum precision of the data type.
Dont Know
Return "Don't Know" value and let application decide.
Longest
Return the longest string length of the column of any row. Beware of this setting when using cursors because the cache size may not be a good representation of the longest column in the cache.

Data Type Options

The following options affects how some data types are mapped.

Text as LongVarChar
PostgreSQL TEXT type is mapped to SQLLongVarchar, otherwise SQLVarchar.
Unknowns as LongVarChar
Unknown types (arrays, etc) are mapped to SQLLongVarChar, otherwise SQLVarchar.
Bools as Char
Booleans are mapped to SQL_CHAR, otherwise to SQL_BIT".

Max Varchar

The maximum precision of the Varchar and BPChar(char[x]) types. The default is 254 which actually means 255 because of the null terminator. Note, if you set this value higher than 254, Access will not let you index on varchar columns!

Cache Size

When using cursors, this is the row size of the tuple cache. If not using cursors, this is how many tuples to allocate memory for at any given time. The default is 100 rows for either case.

Max LongVarChar

The maximum precision of the LongVarChar type. The default is 4094 which actually means 4095 with the null terminator. You can even specify (-4) for this size, which is the odbc SQL_NO_TOTAL value.

SysTable Prefixes

The additional prefixes of table names to regard as System Tables. The driver already treats names that begin with "pg_" as system tables. Here you can add additional ones, such as data dictionary tables (dd_). Separate each prefix with a semicolon (;).

Advanced Options 2/2 Dialog Box

ReadOnly

Whether the datasource will allow updates.

Show System Tables

The driver will treat system tables as regular tables in SQLTables. This is good for Access so you can see system tables.

LF <-> CR/LF conversion

Convert Unix style line endings to DOS style.

Updateable Cursors

Enable updateable cursor emulation in the driver.

Bytea as LO

Allow the use of bytea columns for Large Objects.

Row Versioning

Allows applications to detect whether data has been modified by other users while you are attempting to update a row. It also speeds the update process since every single column does not need to be specified in the where clause to update a row. The driver uses the xmin system field of PostgreSQL to allow for row versioning. Microsoft products seem to use this option well. See the faq for details on what you need to do to your database to allow for the row versioning feature to be used.

Disallow Premature

Mainly for 7.1 to 7.3 servers. Server side prepare is a more preferable option for 7.4+ servers.

Tell the driver how to gather the information about result columns. See also Parse Statements and Server Side Prepare options.

This is an option to compensate for the lack of a server's Prepare functionality. For example, (Middleware) applications issue the following ODBC API calls.

SQLPrepare( hstmt, "SELECT ...", .. )

In most cases they have to know how many fields, what kind of fields they would return and so they would issue SQLNumResultCols and/or SQLDescribeCols/ SQLColAttribute etc.

The problem is how the psqlODBC driver answers the inquiry. PostgreSQL hadn't provided the Prepare functionality until 7.4 and we couldn't ask the backend about it directly.

When using Disallow Premature, the driver will get the column info as follows:

BEGIN; --(unless in a transaction)
DECLARE CURSOR ... FOR SELECT ... ;
FETCH BACKWARD IN ... ;
CLOSE ... ;
This code block illustrates the SQL used by the driver to collect column information when using the Disallow Premature option.

The driver gets the field info using the fetch backward's result. The fetch backward command returns no row but returns the field info. Though the command is expected to be returned immediately it isn't true for 7.0- servers unfortunately. The 7.1 or later servers do seem to return from the fetch backward command immediately.

True is -1

Represent TRUE as -1 for compatibility with some applications.

Server side prepare

Applicable for 7.3+ servers and recommended for 7.4+.

Server Side Prepare - PostgreSQL Versions 7.4 and newer

For PostgreSQL versions 7.4+ and newer, this options tells the driver how to gather the information about result columns. See also Parse Statement and Disallow Premature options.

By using extended query protocol the driver replies to the inquiry correctly and effectively.

By using extended query protocol the driver replies to the inquiry for the information of parameters.

Server Side Prepare - PostgreSQL Versions 7.3 and newer

When using prepared statements, prepare them on the server rather than in the driver. This can give a slight performance advantage as the server doesn't need to re-parse the statement each time it is used.

Use GSSAPI for GSS request

GSSAPI use to AUTH_REQ_GSS request from a server.(only Windows)

Int8 As

Define what datatype to report int8 columns as.

Extra Opts

combination of the following bits:

0x1
Force the output of short-length formatted connection string. Check this bit when you use MFC CDatabase class.
0x2
Fake MS SQL Server so that MS Access recognizes PostgreSQL's serial type as AutoNumber type.
0x4
Reply ANSI (not Unicode) char types for the inquiries from applications. Try to check this bit when your applications don't seem to be good at handling Unicode data.

Protocol

Note that when using SSL connections this setting is ignored.

Level of rollback on errors

Specifies what to rollback should an error occur.

Notes in a setup: This specification is set up with a PROTOCOL option parameter.

PROTOCOL = [ 6.2 | 6.3 | 6.4 | 7.4 ] [ - ( 0 | 1 | 2 ) ]

Default value is a sentence unit (it is a transaction unit before 8.0).

OID Options

Connect Settings

The driver sends these commands to the backend upon a successful connection. It sends these settings AFTER it sends the driver the Connect Settings.

Use a semi-colon (;) to separate commands. This can now handle any query, even if it returns results. The results will be thrown away however!

Global settings Dialog Box

This dialog allows you to specify pre-connection/default logging options

CommLog (C:\psqlodbc_xxxx.log - Communications log)

Log communications to/from the backend to that file. This is good for debugging problems.

MyLog (C:\mylog_xxxx.log - Detailed debug output)

Log debug messages to that file. This is good for debugging problems with the driver.

MSDTCLog (C:\pgdtclog\mylog_xxxx.log - MSDTC debug output)

Log debug messages to that file. This is good for debugging problems with the MSDTC.

Specification of the holder for log outputs

Adjustment of write permission.

Manage DSN Dialog Box

This dialog allows you to select which PostgreSQL ODBC driver to use for this connection. Note that this may not work with third party drivers.

How to specify as a connection option

There is a method of specifying a connection option in a keyword strings.

myConn = "ODBC;DRIVER={PostgreSQL};" & serverConn & _
           "A0=0;A1=6.4;A2=0;A3=0;A4=0;A5=0;A6=;A7=100;A8=4096;A9=0;" & _
             "B0=254;B1=8190;B2=0;B3=0;B4=1;B5=1;B6=0;B7=1;B8=0;B9=1;" & _
               "C0=0;C1=0;C2=dd_"
Example: Sample connection string construction in VBA.

Please refer to a keyword list for details.