Thread: SQLColumns does not allow schema name
I came across this problem while trying to debug another application that uses unix ODBC to access a Postgresql database. The application uses the SQLColumns function to describe tables. When the table is in the public schema and the table name is given just as "tname" then the columns are returned. When the table is given as "public.tname" then the request returns empty. You can reproduce this in isql. If you connect to the database and do "help tname" you get the columns listed. If you try "help public.tname" no rows are returned. Selects return the same results either way, so it is just the description functions that appears broken. I am using unixODBC-2.2.12-9, Postgresql-odbc-08.03.0200-1 and Postgresql-server-8.3.8-1. Steve Hindmarch BT Design
stephen.hindmarch@bt.com wrote: > I came across this problem while trying to debug another application > that uses unix ODBC to access a Postgresql database. The application > uses the SQLColumns function to describe tables. When the table is in > the public schema and the table name is given just as "tname" then the > columns are returned. When the table is given as "public.tname" then the > request returns empty. The declaration of SQLColumns() is the following. SQLRETURN SQL_API SQLColumns(HSTMT StatementHandle, SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR *szTableName, SQLSMALLINT cbTableName, SQLCHAR *szColumnName, SQLSMALLINT cbColumnName); We specify the schema name as the 4th parameter together with the 5th length parameter. > You can reproduce this in isql. If you connect to the database and do > "help tname" you get the columns listed. If you try "help public.tname" > no rows are returned. Selects return the same results either way, so it > is just the description functions that appears broken. > > I am using unixODBC-2.2.12-9, Postgresql-odbc-08.03.0200-1 and > Postgresql-server-8.3.8-1. > > Steve Hindmarch > BT Design > >
> -----Original Message----- > From: Hiroshi Inoue [mailto:inoue@tpf.co.jp] > Sent: 25 September 2009 13:08 > To: Hindmarch,SJ,Stephen,DMM R > Cc: pgsql-odbc@postgresql.org > Subject: Re: [ODBC] SQLColumns does not allow schema name > > stephen.hindmarch@bt.com wrote: > > I came across this problem while trying to debug another application > > that uses unix ODBC to access a Postgresql database. The application > > uses the SQLColumns function to describe tables. When the table is in > > the public schema and the table name is given just as "tname" then > the > > columns are returned. When the table is given as "public.tname" then > the > > request returns empty. > > The declaration of SQLColumns() is the following. > > SQLRETURN SQL_API > SQLColumns(HSTMT StatementHandle, > SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, > SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, > SQLCHAR *szTableName, SQLSMALLINT cbTableName, > SQLCHAR *szColumnName, SQLSMALLINT cbColumnName); > > We specify the schema name as the 4th parameter together with > the 5th length parameter. > Thank you. I understand this now. The developer of the original application has acknowledged that it his bug and he had not used the API correctly. > > You can reproduce this in isql. If you connect to the database and do > > "help tname" you get the columns listed. If you try "help > public.tname" > > no rows are returned. Selects return the same results either way, so > it > > is just the description functions that appears broken. > > > > I am using unixODBC-2.2.12-9, Postgresql-odbc-08.03.0200-1 and > > Postgresql-server-8.3.8-1. > > So how can I describe a table in isql if it is part of a schema? Steve Hindmarch BT Design