Re: How to properly perform this? - Mailing list pgsql-odbc

From Dave Cramer
Subject Re: How to properly perform this?
Date
Msg-id CADK3HHJLCxp+5Q48CatYqg02hBJs0qs8DS=x=Pg5Nx64rD1F7g@mail.gmail.com
Whole thread
In response to How to properly perform this?  (Igor Korot <ikorot01@gmail.com>)
Responses Re: How to properly perform this?
List pgsql-odbc

Dave Cramer
www.postgres.rocks


On Sat, 7 Mar 2026 at 01:10, Igor Korot <ikorot01@gmail.com> wrote:
Hi, ALL,
I'm trying to execute following query:

draft=# SELECT c.relname AS name, ixs.tablespace, ARRAY(SELECT
a.attname FROM pg_attribute a WHERE a.attrelid = idx.indrelid AND
a.attnum = ANY(idx.indkey) AND a.attnum > 0 ORDER BY
array_position(idx.indkey, a.attnum) OFFSET idx.indnkeyatts) AS
included, c.reloptions AS storage FROM pg_index idx, pg_class c,
pg_namespace n, pg_class t, pg_indexes ixs WHERE ixs.indexname =
c.relname AND c.oid = idx.indexrelid AND t.oid = idx.indrelid AND
n.oid = c.relnamespace AND idx.indisprimary AND n.nspname = 'public'
AND t.relname = 'leagues';
     name     | tablespace | included | storage
--------------+------------+----------+---------
 leagues_pkey |            | {}       |
(1 row)


My code is as follows:

            while( ( ret = SQLGetData( m_hstmt, 4, SQL_C_WCHAR,
index_param.get(), 255, &ind[3] ) ) != SQL_NO_DATA )
            {
                if( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO )
                {
                    auto numBytes = ind[3];
                    if( ind[3] == SQL_NO_TOTAL )
                        numBytes = 255;
                    else if( ind[3] > 255 )
                        numBytes = 255;
                    str_to_uc_cpy( options, index_param.get() );
                }
                else
                {
                    GetErrorMessage( errorMsg, STMT_ERROR  );
                    result = 1;
                }
            }
Unfortunately it goes into the loop because apparently the driver or
the server keeps seeing the last column as having data and returns
SQL_SUCCESS.

What is the proper way to resolve this?

I'm using unixODBC with PostgreSQL 16.

My odbc.ini looks like this:

[code]
[postgres]
Driver=Postgres
Description=Postgres ODBC Driver
UserId=postgres
Password=XXX
Servername=localhost
Database=draft
Port=5432

[/code]


What is the best way to proceed?

is the last column empty or null?

if not null then there is data there.

Dave

pgsql-odbc by date:

Previous
From: Igor Korot
Date:
Subject: How to properly perform this?
Next
From: Igor Korot
Date:
Subject: Re: How to properly perform this?