There is no need to infer the type as it is not needed!
PostgreSQL should be able to infer that no type is needed.
PostgreSQL try to by type strict software. Sometimes the types can be detected from context, sometimes not. Somewhere this missing information is solved by type UNKNOWN, somewhere is raised a exception. Unfortunately there is not 100% consistency - some API is very strict, some less, some construct are very tolerant.
When you use a operator =, then unknown value should be casted to left side type.
postgres=# select 1=1; ?column? ---------- t (1 row)
postgres=# select 1='1'; ?column? ---------- t (1 row)
postgres=# select 1='a'; ERROR: invalid input syntax for integer: "a" LINE 1: select 1='a'; ^
On Sunday, October 15, 2017, Eduardo Pérez Ureta <edpeur@gmail.com> wrote:
I understand that not sending the type for a parameter (when it is not null) may not make much sense. But, currently PostgreSQL accepts parameters with unknown types in statements like: INSERT INTO t1 (col1) VALUES (?) SELECT * FROM t1 WHERE col1 = ?
where the column can be different types like VARCHAR or TIMESTAMP
col1 has a type and so the type of the unspecified variable can be inferred. Your is null example cannot have its typed inferred.