Re: JBoss w/int8 primary keys in postgres ...
| От | Oliver Jowett |
|---|---|
| Тема | Re: JBoss w/int8 primary keys in postgres ... |
| Дата | |
| Msg-id | 20030911062448.GJ6485@opencloud.com обсуждение исходный текст |
| Ответ на | Re: JBoss w/int8 primary keys in postgres ... (Tom Lane <tgl@sss.pgh.pa.us>) |
| Список | pgsql-jdbc |
On Thu, Sep 11, 2003 at 01:40:21AM -0400, Tom Lane wrote: > Oliver Jowett <oliver@opencloud.com> writes: > > which should use the index. However with server-side prepared queries > > enabled the query is transformed to something like this: > > > PREPARE jdbc_statement_N(int8) AS SELECT * FROM foo WHERE bar = $1; > > EXECUTE jdbc_statement_N(12345) > > > Which I suspect won't use the index as $1 is typed to int8. (anyone know for > > sure? I can't find an easy way to get at the query plan produced by > > PREPARE). > > In 7.4 you can do EXPLAIN EXECUTE. But no, this wouldn't use the index > :-(. What exactly is causing the driver to decide to type the parameter > as int8? JDBC doesn't provide a separate parameter-typing step for parameterized queries, so the driver has to infer the type from the method used to set the actual value of a parameter. In this case, setLong() takes a Java long which is a signed 64-bit integer, so the driver picks int8. There's a more general interface (setObject()) that allows both a value and a target SQL type to be specified, but that's not commonly used for primitive types thanks to Java's primitive-vs-Object distinction. See http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html -O
В списке pgsql-jdbc по дате отправления: