Thread: HOWTO pass "default value" to PQexecParams ?
-- SQL Script Create Table test ( id int4 not null, name text default '<noname>' ); -- C PQexec (conn, "INSERT INTO test(id, name) VALUES (100,default)" ); // OK. PQexecParams (conn, "INSERT INTO test(id, name) VALUES ($1, $2)" ); // $1=100, $2= ????
AFAIK, it's not possible to point the field's default value using a special value in the related array member. Because, you cannot declare any special value in the array: NULL will be treated as NULL and other char values as is. (Recommended.) Why don't you omit id in the target table fields? For instance: sprintf(sql_cmd, "INSERT INTO test (" (id_will_be_default) ? "" : "id, " "name) VALUES(" "..."); PQexecParams(conn, sql_cmd, ...); You can also learn the default value of the related field too. (For more information, run psql with -E parameter and type \d <table>.) Furthermore, it's possible to define a RULE like: ON INSERT IF NEW.id = 0 USE DEFAULT This will assume 0 as a reference to default value. HTH. Regards. On Jan 06 09:16, JiangWei wrote: > Create Table test ( > id int4 not null, > name text default '<noname>' > ); > > PQexec (conn, "INSERT INTO test(id, name) VALUES (100,default)" ); // OK. > > PQexecParams (conn, "INSERT INTO test(id, name) VALUES ($1, $2)" ); // > $1=100, $2= ????
Volkan YAZICI wrote: >AFAIK, it's not possible to point the field's default value using a >special value in the related array member. Because, you cannot declare >any special value in the array: NULL will be treated as NULL and other >char values as is. > > We can declare a specialized oid for this.
On Jan 09 04:18, JiangWei wrote: > >AFAIK, it's not possible to point the field's default value using a > >special value in the related array member. Because, you cannot declare > >any special value in the array: NULL will be treated as NULL and other > >char values as is. > > We can declare a specialized oid for this. You mean in the parameter types? If so, is this supported by PostgreSQL? Regards.
Volkan YAZICI wrote: <blockquote cite="mid20060109104145.GA546@alamut" type="cite"><pre wrap="">On Jan 09 04:18, JiangWeiwrote: </pre><blockquote type="cite"><blockquote type="cite"><pre wrap="">AFAIK, it's not possible to point the field'sdefault value using a special value in the related array member. Because, you cannot declare any special value in the array: NULL will be treated as NULL and other char values as is. </pre></blockquote><pre wrap="">We can declare a specialized oid for this. </pre></blockquote><prewrap=""> You mean in the parameter types? </pre></blockquote> Yes.<br /><blockquote cite="mid20060109104145.GA546@alamut" type="cite"><prewrap="">If so, is this supported by PostgreSQL? </pre></blockquote> No. Just an idea. "EXPRESSION_OID" for'DEFAULT' , ' foo ( id, 2) ', 'm * n + x' ...<br /><br /><br />