Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-09 Thread Amit Kapila
On Monday, April 08, 2013 7:28 PM Rodrigo Barboza wrote:
On Sat, Apr 6, 2013 at 10:39 PM, Rodrigo Barboza rodrigombu...@gmail.com
wrote:
Ok! I will try to reproduce in a smaller scenario. 
On Sat, Apr 6, 2013 at 9:53 PM, Amit Kapila amit.kap...@huawei.com wrote:
On Saturday, April 06, 2013 12:18 PM Rodrigo Barboza wrote:
On Sat, Apr 6, 2013 at 12:23 AM, Amit Kapila amit.kap...@huawei.com
wrote:
 On Saturday, April 06, 2013 3:57 AM Rodrigo Barboza wrote:

Hello.
 I created a type my_uint that is a unsigned int 32.

 I am trying to update data of a table that contains a column of this
type.
 Here is what happens:

 postgresql= explain analyze UPDATE attribute_type_conf SET rowform =
rowform +1 where rowform = 18;
 ERROR:  unsupported type: 132852
 Can you post your complete test (like your type creation and its use
for
 table and any initial data you loaded to it)?


 Well, it's a lot of data.
 May I send it atached?
If you can't make it to small reproducible test, then you can send.


I was trying to reproduce the error, but it is was not raising error.
I didn't change anything.
Last week I dropped the database, created it again, populated my db and
when it was time to run the query, the error raised.
I'm puzzled. I can't trust it...

 But now I run this script and the error finally raised. It seems random.

The reason for seldom behavior is that, it occurs only when the value you
are giving in your where clause lies in valid boundary of histogram (refer
function ineq_histogram_selectivity).

 psql -U testuser testdb -c drop table if exists tm32;
 psql -U testuser testdb -c create table tm32 (a tmuint32);


 for ((i=0; i100; i++));do
 psql -U testuser testdb ENDOFSQLDATA
 insert into tm32 values($i);
 ENDOFSQLDATA
 done

 for ((i=0; i100; i++ )); do
 psql -U testuser testdb ENDOFSQLDATA
 BEGIN;
 UPDATE tm32 SET a = a + 1 WHERE a  $i;
 END;
 ENDOFSQLDATA
 done

 The error message: 
 ERROR: unsupported type: 202886
 ROLLBACK

You have identified rightly in your other mail that it happens in function
convert_numeric_to_scalar(). But I think adding user defined datatype
handling in this function might 
not be straight forward. You can refer below text from link
http://www.postgresql.org/docs/9.2/static/xoper-optimization.html 
You can use scalarltsel and scalargtsel for comparisons on data types that
have some sensible means of being converted into numeric scalars for range
comparisons. If possible, add the data type to those understood by the
function convert_to_scalar() in src/backend/utils/adt/selfuncs.c.
(Eventually, this function should be replaced by per-data-type functions
identified through a column of the pg_type system catalog; but that hasn't
happened yet.) If you do not do this, things will still work, but the
optimizer's estimates won't be as good as they could be. 

I could think of following workaround's for your problem. 

1. For your table, set values for autovacuum_analyze_threshold and
autovacuum_analyze_scale_factor very high (refer Create Table), so that it
doesn't analyze your 
  table and return default selectivity, which should work fine if your sql
statements are simple. 

2. Write your own selectivity functions and return default Selectivity from
them and use them while creating operators. 

3. Use bind value in where clause, it will return default selectivity for
it. 

4. Some other way, with which it does not collect histogram stats (means it
will use minimal stats compute_minimal_stats). I am not sure but you can try
once without defining operators. 

All the above way's can help to resolve your current problem, but they are
not good way if you have some usage of sql statements with these datatypes.

With Regards,
Amit Kapila.



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-09 Thread Rodrigo Barboza
On Tue, Apr 9, 2013 at 3:05 AM, Amit Kapila amit.kap...@huawei.com wrote:

 On Monday, April 08, 2013 7:28 PM Rodrigo Barboza wrote:
 On Sat, Apr 6, 2013 at 10:39 PM, Rodrigo Barboza rodrigombu...@gmail.com
 wrote:
 Ok! I will try to reproduce in a smaller scenario.
 On Sat, Apr 6, 2013 at 9:53 PM, Amit Kapila amit.kap...@huawei.com
 wrote:
 On Saturday, April 06, 2013 12:18 PM Rodrigo Barboza wrote:
 On Sat, Apr 6, 2013 at 12:23 AM, Amit Kapila amit.kap...@huawei.com
 wrote:
  On Saturday, April 06, 2013 3:57 AM Rodrigo Barboza wrote:

 Hello.
  I created a type my_uint that is a unsigned int 32.

  I am trying to update data of a table that contains a column of this
 type.
  Here is what happens:

  postgresql= explain analyze UPDATE attribute_type_conf SET rowform =
 rowform +1 where rowform = 18;
  ERROR:  unsupported type: 132852
  Can you post your complete test (like your type creation and its use
 for
  table and any initial data you loaded to it)?


  Well, it's a lot of data.
  May I send it atached?
 If you can't make it to small reproducible test, then you can send.


 I was trying to reproduce the error, but it is was not raising error.
 I didn't change anything.
 Last week I dropped the database, created it again, populated my db and
 when it was time to run the query, the error raised.
 I'm puzzled. I can't trust it...

  But now I run this script and the error finally raised. It seems random.

 The reason for seldom behavior is that, it occurs only when the value you
 are giving in your where clause lies in valid boundary of histogram (refer
 function ineq_histogram_selectivity).

  psql -U testuser testdb -c drop table if exists tm32;
  psql -U testuser testdb -c create table tm32 (a tmuint32);


  for ((i=0; i100; i++));do
  psql -U testuser testdb ENDOFSQLDATA
  insert into tm32 values($i);
  ENDOFSQLDATA
  done

  for ((i=0; i100; i++ )); do
  psql -U testuser testdb ENDOFSQLDATA
  BEGIN;
  UPDATE tm32 SET a = a + 1 WHERE a  $i;
  END;
  ENDOFSQLDATA
  done

  The error message:
  ERROR: unsupported type: 202886
  ROLLBACK

 You have identified rightly in your other mail that it happens in function
 convert_numeric_to_scalar(). But I think adding user defined datatype
 handling in this function might
 not be straight forward. You can refer below text from link
 http://www.postgresql.org/docs/9.2/static/xoper-optimization.html
 You can use scalarltsel and scalargtsel for comparisons on data types that
 have some sensible means of being converted into numeric scalars for range
 comparisons. If possible, add the data type to those understood by the
 function convert_to_scalar() in src/backend/utils/adt/selfuncs.c.
 (Eventually, this function should be replaced by per-data-type functions
 identified through a column of the pg_type system catalog; but that hasn't
 happened yet.) If you do not do this, things will still work, but the
 optimizer's estimates won't be as good as they could be.

 I could think of following workaround's for your problem.

 1. For your table, set values for autovacuum_analyze_threshold and
 autovacuum_analyze_scale_factor very high (refer Create Table), so that it
 doesn't analyze your
   table and return default selectivity, which should work fine if your sql
 statements are simple.

 2. Write your own selectivity functions and return default Selectivity from
 them and use them while creating operators.

 3. Use bind value in where clause, it will return default selectivity for
 it.

 4. Some other way, with which it does not collect histogram stats (means it
 will use minimal stats compute_minimal_stats). I am not sure but you can
 try
 once without defining operators.

 All the above way's can help to resolve your current problem, but they are
 not good way if you have some usage of sql statements with these datatypes.

 With Regards,
 Amit Kapila.



Hi, Amit, thank you for your reply.

The text says: if you do not do this, things will still work, but the
optimizer's
estimates won't be as good as they could be..
But this is not what is happening, he is raising unsupported type error.

I think option 1 and 4 is not for me.
Option 2 could be a solution, but I don't know how to start writing this
kind of function. Do you any tips?
I didn't understand option 3, what did you mean?


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-09 Thread Amit Kapila

On Tuesday, April 09, 2013 6:19 PM Rodrigo Barboza wrote:
On Tue, Apr 9, 2013 at 3:05 AM, Amit Kapila amit.kap...@huawei.com wrote:
On Monday, April 08, 2013 7:28 PM Rodrigo Barboza wrote:
 You have identified rightly in your other mail that it happens in
function
 convert_numeric_to_scalar(). But I think adding user defined datatype
 handling in this function might
 not be straight forward. You can refer below text from link
 http://www.postgresql.org/docs/9.2/static/xoper-optimization.html
 You can use scalarltsel and scalargtsel for comparisons on data types
that
 have some sensible means of being converted into numeric scalars for
range
 comparisons. If possible, add the data type to those understood by the
 function convert_to_scalar() in src/backend/utils/adt/selfuncs.c.
 (Eventually, this function should be replaced by per-data-type functions
 identified through a column of the pg_type system catalog; but that
hasn't
 happened yet.) If you do not do this, things will still work, but the
 optimizer's estimates won't be as good as they could be.

 I could think of following workaround's for your problem.

 1. For your table, set values for autovacuum_analyze_threshold and
 autovacuum_analyze_scale_factor very high (refer Create Table), so that
it
 doesn't analyze your
  table and return default selectivity, which should work fine if your sql
 statements are simple.

 2. Write your own selectivity functions and return default Selectivity
from
 them and use them while creating operators.

 3. Use bind value in where clause, it will return default selectivity for
 it.

 4. Some other way, with which it does not collect histogram stats (means
it
 will use minimal stats compute_minimal_stats). I am not sure but you can
try
 once without defining operators.

 All the above way's can help to resolve your current problem, but they
are
 not good way if you have some usage of sql statements with these
datatypes.


 Hi, Amit, thank you for your reply.

 The text says: if you do not do this, things will still work, but
the optimizer's estimates won't be as good as they could be..
 But this is not what is happening, he is raising unsupported type error.

 I think option 1 and 4 is not for me.
 Option 2 could be a solution, but I don't know how to start writing this
kind of function. Do you any tips?

You need to write C function and use them while creating operator's, Refer
link:
http://www.postgresql.org/docs/9.2/static/xfunc-c.html

 I didn't understand option 3, what did you mean?

Option 3 means you can use prepared statements to specify bind values for
where clause. 
Refer link:
http://www.postgresql.org/docs/9.2/static/sql-prepare.html

With Regards,
Amit Kapila.



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-09 Thread Rodrigo Barboza
On Wed, Apr 10, 2013 at 12:24 AM, Amit Kapila amit.kap...@huawei.comwrote:


 On Tuesday, April 09, 2013 6:19 PM Rodrigo Barboza wrote:
 On Tue, Apr 9, 2013 at 3:05 AM, Amit Kapila amit.kap...@huawei.com
 wrote:
 On Monday, April 08, 2013 7:28 PM Rodrigo Barboza wrote:
  You have identified rightly in your other mail that it happens in
 function
  convert_numeric_to_scalar(). But I think adding user defined datatype
  handling in this function might
  not be straight forward. You can refer below text from link
  http://www.postgresql.org/docs/9.2/static/xoper-optimization.html
  You can use scalarltsel and scalargtsel for comparisons on data types
 that
  have some sensible means of being converted into numeric scalars for
 range
  comparisons. If possible, add the data type to those understood by the
  function convert_to_scalar() in src/backend/utils/adt/selfuncs.c.
  (Eventually, this function should be replaced by per-data-type functions
  identified through a column of the pg_type system catalog; but that
 hasn't
  happened yet.) If you do not do this, things will still work, but the
  optimizer's estimates won't be as good as they could be.

  I could think of following workaround's for your problem.

  1. For your table, set values for autovacuum_analyze_threshold and
  autovacuum_analyze_scale_factor very high (refer Create Table), so that
 it
  doesn't analyze your
   table and return default selectivity, which should work fine if your
 sql
  statements are simple.

  2. Write your own selectivity functions and return default Selectivity
 from
  them and use them while creating operators.

  3. Use bind value in where clause, it will return default selectivity
 for
  it.

  4. Some other way, with which it does not collect histogram stats (means
 it
  will use minimal stats compute_minimal_stats). I am not sure but you can
 try
  once without defining operators.

  All the above way's can help to resolve your current problem, but they
 are
  not good way if you have some usage of sql statements with these
 datatypes.


  Hi, Amit, thank you for your reply.

  The text says: if you do not do this, things will still work, but
 the optimizer's estimates won't be as good as they could be..
  But this is not what is happening, he is raising unsupported type error.

  I think option 1 and 4 is not for me.
  Option 2 could be a solution, but I don't know how to start writing this
 kind of function. Do you any tips?

 You need to write C function and use them while creating operator's, Refer
 link:
 http://www.postgresql.org/docs/9.2/static/xfunc-c.html

  I didn't understand option 3, what did you mean?

 Option 3 means you can use prepared statements to specify bind values for
 where clause.
 Refer link:
 http://www.postgresql.org/docs/9.2/static/sql-prepare.html

 With Regards,
 Amit Kapila.


Write the c funtions is OK. I've written some functions for my type, but
write the selectivity function is not clear for me.
In documentation it says this is out the doc scope. But I read the source
code and it doesn't seem to be trivial.
There are lots of function calls to deal.

Would it be very bad to offer no selectivity function for my type?


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-08 Thread Tom Lane
Rodrigo Barboza rodrigombu...@gmail.com writes:
 UPDATE tm32 SET a = a + 1 WHERE a  $i;
 ERROR: unsupported type: 202886

I'm betting that's coming from scalargtsel, which doesn't know anything
about your type, but you've nominated it to be the selectivity function
for  anyway.

/*
 * Can't get here unless someone tries to use scalarltsel/scalargtsel on
 * an operator with one numeric and one non-numeric operand.
 */
elog(ERROR, unsupported type: %u, typid);

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-08 Thread Rodrigo Barboza
On Mon, Apr 8, 2013 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:

 Rodrigo Barboza rodrigombu...@gmail.com writes:
  UPDATE tm32 SET a = a + 1 WHERE a  $i;
  ERROR: unsupported type: 202886

 I'm betting that's coming from scalargtsel, which doesn't know anything
 about your type, but you've nominated it to be the selectivity function
 for  anyway.

 /*
  * Can't get here unless someone tries to use
 scalarltsel/scalargtsel on
  * an operator with one numeric and one non-numeric operand.
  */
 elog(ERROR, unsupported type: %u, typid);

 regards, tom lane



Yes, I found it in the code, but I followed the example from the postgres
documentation that uses this function.
And why does it work sometimes? Why not other times?


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-08 Thread Rodrigo Barboza
On Mon, Apr 8, 2013 at 11:27 AM, Rodrigo Barboza rodrigombu...@gmail.comwrote:



 On Mon, Apr 8, 2013 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:

 Rodrigo Barboza rodrigombu...@gmail.com writes:
  UPDATE tm32 SET a = a + 1 WHERE a  $i;
  ERROR: unsupported type: 202886

 I'm betting that's coming from scalargtsel, which doesn't know anything
 about your type, but you've nominated it to be the selectivity function
 for  anyway.

 /*
  * Can't get here unless someone tries to use
 scalarltsel/scalargtsel on
  * an operator with one numeric and one non-numeric operand.
  */
 elog(ERROR, unsupported type: %u, typid);

 regards, tom lane



 Yes, I found it in the code, but I followed the example from the postgres
 documentation that uses this function.
  And why does it work sometimes? Why not other times?



Here is a very simple case and weird behavior. I select * from a table and
returns 4 entries.
But when I run with a filter the error raises and crazy values are printed
from the params.

Here is my funcitons where I compare the values:

typedef uint32_t TmUInt32;

static int
tmuint32_int32_abs_cmp_internal(TmUInt32 a, int32_t b)
{
int ret;
elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);
if (a  b) ret = -1;
else if (a  b) ret = 1;
else ret = 0;
elog(NOTICE, funcao:%s linha:%d, ret: %d a: %u\n, *_FUNCTION_*, *_LINE_*,
ret, a);
return ret;
}

PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

Datum
tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
{
TmUInt32 *param1;
int32_t param2;
elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);

if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) PG_RETURN_NULL();

param1 = (TmUInt32 *) PG_GETARG_POINTER(0);
param2 = DatumGetInt32(PG_GETARG_DATUM(1));

elog(NOTICE, funcao:%s linha:%d param1: %u, param2: %d\n, *_FUNCTION_*, *
_LINE_*, *param1, param2);
PG_RETURN_BOOL(tmuint32_int32_abs_cmp_internal(*param1, param2)  0);
}


And here is the simple test.

-- SIMPLE QUERY
select * from a;

NOTICE:  funcao:tmuint32_out linha:191

NOTICE:  funcao:tmuint32_out linha:191

NOTICE:  funcao:tmuint32_out linha:191

NOTICE:  funcao:tmuint32_out linha:191

 a
---
 0
 1
 2
 3
(4 rows)


_

-- QUERY WHITH FILTER
select * from a where a  1;

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 0, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: -1 a: 0

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 99, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 99

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 50, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 50

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 24, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 24

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 12, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 12

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 6, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 6

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 2, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 2

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 1, param2: 1

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 0 a: 1

ERROR:  unsupported type: 220200


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-08 Thread Rodrigo Barboza
On Mon, Apr 8, 2013 at 11:44 AM, Rodrigo Barboza rodrigombu...@gmail.comwrote:




 On Mon, Apr 8, 2013 at 11:27 AM, Rodrigo Barboza 
 rodrigombu...@gmail.comwrote:



 On Mon, Apr 8, 2013 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:

 Rodrigo Barboza rodrigombu...@gmail.com writes:
  UPDATE tm32 SET a = a + 1 WHERE a  $i;
  ERROR: unsupported type: 202886

 I'm betting that's coming from scalargtsel, which doesn't know anything
 about your type, but you've nominated it to be the selectivity function
 for  anyway.

 /*
  * Can't get here unless someone tries to use
 scalarltsel/scalargtsel on
  * an operator with one numeric and one non-numeric operand.
  */
 elog(ERROR, unsupported type: %u, typid);

 regards, tom lane



 Yes, I found it in the code, but I followed the example from the postgres
 documentation that uses this function.
  And why does it work sometimes? Why not other times?



 Here is a very simple case and weird behavior. I select * from a table and
 returns 4 entries.
 But when I run with a filter the error raises and crazy values are printed
 from the params.

 Here is my funcitons where I compare the values:

 typedef uint32_t TmUInt32;

 static int
 tmuint32_int32_abs_cmp_internal(TmUInt32 a, int32_t b)
 {
 int ret;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);
 if (a  b) ret = -1;
 else if (a  b) ret = 1;
 else ret = 0;
 elog(NOTICE, funcao:%s linha:%d, ret: %d a: %u\n, *_FUNCTION_*, *_LINE_*,
 ret, a);
 return ret;
 }

 PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

 Datum
 tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
 {
 TmUInt32 *param1;
 int32_t param2;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);

 if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) PG_RETURN_NULL();

 param1 = (TmUInt32 *) PG_GETARG_POINTER(0);
 param2 = DatumGetInt32(PG_GETARG_DATUM(1));

 elog(NOTICE, funcao:%s linha:%d param1: %u, param2: %d\n, *_FUNCTION_*,
 *_LINE_*, *param1, param2);
 PG_RETURN_BOOL(tmuint32_int32_abs_cmp_internal(*param1, param2)  0);
 }


 And here is the simple test.

 -- SIMPLE QUERY
 select * from a;

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

  a
 ---
  0
  1
  2
  3
 (4 rows)


 _

 -- QUERY WHITH FILTER
 select * from a where a  1;

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 0, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: -1 a: 0

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 99, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 99

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 50, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 50

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 24, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 24

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 12, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 12

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 6, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 6

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 2, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 2

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 1, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 0 a: 1

 ERROR:  unsupported type: 220200



I found that the problem is in the highlithed line. I'm getting the wrong
value from param1. But why this behavior?

PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

Datum
tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
{
TmUInt32 *param1;
int32_t param2;
elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);

if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) PG_RETURN_NULL();

param1 = (TmUInt32 *) PG_GETARG_POINTER(0);
param2 = 

Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-08 Thread Rodrigo Barboza
On Mon, Apr 8, 2013 at 12:14 PM, Rodrigo Barboza rodrigombu...@gmail.comwrote:




 On Mon, Apr 8, 2013 at 11:44 AM, Rodrigo Barboza 
 rodrigombu...@gmail.comwrote:




 On Mon, Apr 8, 2013 at 11:27 AM, Rodrigo Barboza rodrigombu...@gmail.com
  wrote:



 On Mon, Apr 8, 2013 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:

 Rodrigo Barboza rodrigombu...@gmail.com writes:
  UPDATE tm32 SET a = a + 1 WHERE a  $i;
  ERROR: unsupported type: 202886

 I'm betting that's coming from scalargtsel, which doesn't know anything
 about your type, but you've nominated it to be the selectivity function
 for  anyway.

 /*
  * Can't get here unless someone tries to use
 scalarltsel/scalargtsel on
  * an operator with one numeric and one non-numeric operand.
  */
 elog(ERROR, unsupported type: %u, typid);

 regards, tom lane



 Yes, I found it in the code, but I followed the example from the
 postgres documentation that uses this function.
  And why does it work sometimes? Why not other times?



 Here is a very simple case and weird behavior. I select * from a table
 and returns 4 entries.
 But when I run with a filter the error raises and crazy values are
 printed from the params.

 Here is my funcitons where I compare the values:

 typedef uint32_t TmUInt32;

 static int
 tmuint32_int32_abs_cmp_internal(TmUInt32 a, int32_t b)
 {
 int ret;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);
 if (a  b) ret = -1;
 else if (a  b) ret = 1;
 else ret = 0;
 elog(NOTICE, funcao:%s linha:%d, ret: %d a: %u\n, *_FUNCTION_*, *_LINE_
 *, ret, a);
 return ret;
 }

 PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

 Datum
 tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
 {
 TmUInt32 *param1;
 int32_t param2;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);

 if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) PG_RETURN_NULL();

 param1 = (TmUInt32 *) PG_GETARG_POINTER(0);
 param2 = DatumGetInt32(PG_GETARG_DATUM(1));

 elog(NOTICE, funcao:%s linha:%d param1: %u, param2: %d\n, *_FUNCTION_*,
 *_LINE_*, *param1, param2);
 PG_RETURN_BOOL(tmuint32_int32_abs_cmp_internal(*param1, param2)  0);
 }


 And here is the simple test.

 -- SIMPLE QUERY
 select * from a;

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

  a
 ---
  0
  1
  2
  3
 (4 rows)


 _

 -- QUERY WHITH FILTER
 select * from a where a  1;

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 0, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: -1 a: 0

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 99, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 99

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 50, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 50

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 24, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 24

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 12, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 12

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 6, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 6

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 2, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 2

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 1, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 0 a: 1

 ERROR:  unsupported type: 220200



 I found that the problem is in the highlithed line. I'm getting the wrong
 value from param1. But why this behavior?

 PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

 Datum
 tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
 {
 TmUInt32 *param1;
 int32_t param2;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);

 if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) 

Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-08 Thread Rodrigo Barboza
On Mon, Apr 8, 2013 at 4:30 PM, Rodrigo Barboza rodrigombu...@gmail.comwrote:





 On Mon, Apr 8, 2013 at 12:14 PM, Rodrigo Barboza 
 rodrigombu...@gmail.comwrote:




 On Mon, Apr 8, 2013 at 11:44 AM, Rodrigo Barboza rodrigombu...@gmail.com
  wrote:




 On Mon, Apr 8, 2013 at 11:27 AM, Rodrigo Barboza 
 rodrigombu...@gmail.com wrote:



 On Mon, Apr 8, 2013 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:

 Rodrigo Barboza rodrigombu...@gmail.com writes:
  UPDATE tm32 SET a = a + 1 WHERE a  $i;
  ERROR: unsupported type: 202886

 I'm betting that's coming from scalargtsel, which doesn't know anything
 about your type, but you've nominated it to be the selectivity function
 for  anyway.

 /*
  * Can't get here unless someone tries to use
 scalarltsel/scalargtsel on
  * an operator with one numeric and one non-numeric operand.
  */
 elog(ERROR, unsupported type: %u, typid);

 regards, tom lane



 Yes, I found it in the code, but I followed the example from the
 postgres documentation that uses this function.
  And why does it work sometimes? Why not other times?



 Here is a very simple case and weird behavior. I select * from a table
 and returns 4 entries.
 But when I run with a filter the error raises and crazy values are
 printed from the params.

 Here is my funcitons where I compare the values:

 typedef uint32_t TmUInt32;

 static int
 tmuint32_int32_abs_cmp_internal(TmUInt32 a, int32_t b)
 {
 int ret;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);
 if (a  b) ret = -1;
 else if (a  b) ret = 1;
 else ret = 0;
 elog(NOTICE, funcao:%s linha:%d, ret: %d a: %u\n, *_FUNCTION_*, *
 _LINE_*, ret, a);
 return ret;
 }

 PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

 Datum
 tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
 {
 TmUInt32 *param1;
 int32_t param2;
 elog(NOTICE, funcao:%s linha:%d\n, *_FUNCTION_*, *_LINE_*);

 if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) PG_RETURN_NULL();

 param1 = (TmUInt32 *) PG_GETARG_POINTER(0);
 param2 = DatumGetInt32(PG_GETARG_DATUM(1));

 elog(NOTICE, funcao:%s linha:%d param1: %u, param2: %d\n, *_FUNCTION_*,
 *_LINE_*, *param1, param2);
 PG_RETURN_BOOL(tmuint32_int32_abs_cmp_internal(*param1, param2)  0);
 }


 And here is the simple test.

 -- SIMPLE QUERY
 select * from a;

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

 NOTICE:  funcao:tmuint32_out linha:191

  a
 ---
  0
  1
  2
  3
 (4 rows)


 _

 -- QUERY WHITH FILTER
 select * from a where a  1;

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 0, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: -1 a: 0

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 99, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 99

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 50, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 50

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 24, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 24

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 12, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 12

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 6, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 6

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 2, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 1 a: 2

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1296

 NOTICE:  funcao:tmuint32_int32_abs_gt linha:1303 param1: 1, param2: 1

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:742

 NOTICE:  funcao:tmuint32_int32_abs_cmp_internal linha:746, ret: 0 a: 1

 ERROR:  unsupported type: 220200



 I found that the problem is in the highlithed line. I'm getting the wrong
 value from param1. But why this behavior?

 PG_FUNCTION_INFO_V1(tmuint32_int32_abs_gt);

 Datum
 tmuint32_int32_abs_gt(PG_FUNCTION_ARGS)
 {
 TmUInt32 *param1;
 int32_t param2;
 elog(NOTICE, 

Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-06 Thread Rodrigo Barboza
On Sat, Apr 6, 2013 at 12:23 AM, Amit Kapila amit.kap...@huawei.com wrote:

  On Saturday, April 06, 2013 3:57 AM Rodrigo Barboza wrote:

 Hello.
  I created a type my_uint that is a unsigned int 32.

  I am trying to update data of a table that contains a column of this
 type.
  Here is what happens:

  postgresql= explain analyze UPDATE attribute_type_conf SET rowform =
 rowform +1 where rowform = 18;
  ERROR:  unsupported type: 132852

 Can you post your complete test (like your type creation and its use for
 table and any initial data you loaded to it)?


 With Regards,
 Amit Kapila.



Well, it's a lot of data.
May I send it atached?


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-06 Thread Amit Kapila
On Saturday, April 06, 2013 12:18 PM Rodrigo Barboza wrote:
On Sat, Apr 6, 2013 at 12:23 AM, Amit Kapila amit.kap...@huawei.com
wrote:
 On Saturday, April 06, 2013 3:57 AM Rodrigo Barboza wrote:

Hello.
 I created a type my_uint that is a unsigned int 32.

 I am trying to update data of a table that contains a column of this
type.
 Here is what happens:

 postgresql= explain analyze UPDATE attribute_type_conf SET rowform =
rowform +1 where rowform = 18;
 ERROR:  unsupported type: 132852
 Can you post your complete test (like your type creation and its use for
 table and any initial data you loaded to it)?



 Well, it's a lot of data.
 May I send it atached?
If you can't make it to small reproducible test, then you can send.

With Regards,
Amit Kapila.



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-06 Thread Rodrigo Barboza
Ok! I will try to reproduce in a smaller scenario.


On Sat, Apr 6, 2013 at 9:53 PM, Amit Kapila amit.kap...@huawei.com wrote:

 On Saturday, April 06, 2013 12:18 PM Rodrigo Barboza wrote:
 On Sat, Apr 6, 2013 at 12:23 AM, Amit Kapila amit.kap...@huawei.com
 wrote:
  On Saturday, April 06, 2013 3:57 AM Rodrigo Barboza wrote:

 Hello.
  I created a type my_uint that is a unsigned int 32.

  I am trying to update data of a table that contains a column of this
 type.
  Here is what happens:

  postgresql= explain analyze UPDATE attribute_type_conf SET rowform =
 rowform +1 where rowform = 18;
  ERROR:  unsupported type: 132852
  Can you post your complete test (like your type creation and its use for
  table and any initial data you loaded to it)?



  Well, it's a lot of data.
  May I send it atached?
 If you can't make it to small reproducible test, then you can send.

 With Regards,
 Amit Kapila.




Re: [HACKERS] Unrecognized type error (postgres 9.1.4)

2013-04-05 Thread Amit Kapila
 On Saturday, April 06, 2013 3:57 AM Rodrigo Barboza wrote:

Hello.
 I created a type my_uint that is a unsigned int 32.

 I am trying to update data of a table that contains a column of this type.
 Here is what happens:

 postgresql= explain analyze UPDATE attribute_type_conf SET rowform =
rowform +1 where rowform = 18;
 ERROR:  unsupported type: 132852

Can you post your complete test (like your type creation and its use for
table and any initial data you loaded to it)?


With Regards,
Amit Kapila.



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers