BUG #2395: Can't get right type oid by PQftype.

Started by wangshjabout 20 years ago4 messagesbugs
Jump to latest
#1wangshj
wangshj@sduept.com

The following bug has been logged online:

Bug reference: 2395
Logged by: wangshj
Email address: wangshj@sduept.com
PostgreSQL version: 8.1.3
Operating system: CentOS release 4.3 (Final)
Description: Can't get right type oid by PQftype.
Details:

I create a domain type testdomainoid.

CREATE DOMAIN testdomainoid int CHECK(value >20);

In my database,the type oid of testdomainoid is 16385.But PQftype return 23
for testdomainoid's type oid.How could I get the testdomainoid's type oid.

--Creating a table use domain type.
CREATE TABLE test_domain_oid ( col testdomainoid );

--Insert a value.
INSERT INTO test_domain_oid VALUES (30);

//following is my test code.
#include <iostream>
#include "libpq-fe.h"
#include <sstream>

int main(int argc, char ** argv){
PGconn * conn = PQconnectdb("");
if( CONNECTION_OK != PQstatus(conn ) )
{
std::cout << "\nCan't connecte to db\n";
return 0;
}

PGresult * r = PQexec( conn, "SELECT col FROM test_domain_oid " );
if( PGRES_TUPLES_OK == PQresultStatus(r) )
{
Oid id = PQftype( r, 0 );
int mod = PQfmod( r, 0 );
std::cout<<"\noid: " << id<<"\nmod:" << mod <<std::endl;
}
else
{
std::cout << "\nQuery failed..\n";
return 0;
}

PQclear( r );
PQfinish( conn );
};

#2Volkan YAZICI
yazicivo@ttnet.net.tr
In reply to: wangshj (#1)
Re: BUG #2395: Can't get right type oid by PQftype.

On Apr 14 06:30, wangshj wrote:

In my database,the type oid of testdomainoid is 16385. But PQftype return 23
for testdomainoid's type oid.

PQftype() returns the OID of the actual _type_ used in the domain.
Therefore, you get 23, OID of the int4/int type, in the above query.

How could I get the testdomainoid's type oid.

Simply by querying pg_type catalog:

SELECT oid FROM pg_catalog.pg_type WHERE typname = 'testdomainoid';

Regards.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Volkan YAZICI (#2)
Re: BUG #2395: Can't get right type oid by PQftype.

Volkan YAZICI <yazicivo@ttnet.net.tr> writes:

On Apr 14 06:30, wangshj wrote:

In my database,the type oid of testdomainoid is 16385. But PQftype return 23
for testdomainoid's type oid.

PQftype() returns the OID of the actual _type_ used in the domain.
Therefore, you get 23, OID of the int4/int type, in the above query.

Yeah, this is considered a feature not a bug. In fact the original
implementation just returned the domain's OID, and that was objected
to because most client programs wouldn't recognize it.

regards, tom lane

#4jw
jw@sduept.com
In reply to: Tom Lane (#3)
Re: BUG #2395: Can't get right type oid by PQftype.

Tom Lane 写锟斤拷:

Yeah, this is considered a feature not a bug. In fact the original
implementation just returned the domain's OID, and that was objected
to because most client programs wouldn't recognize it.

How to disable this feature ?