Re: [SQL] Problem with timestamp and primary key.

From: Herouth Maoz <herouth(at)oumail(dot)openu(dot)ac(dot)il>
To: Steven Bradley <sbradley(at)llnl(dot)gov>, "Esteban Chiner Sanz" <echiner(at)tissat(dot)es>
Cc: pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] Problem with timestamp and primary key.
Date: 1999-07-13 16:06:54
Message-ID: l03130302b3b10f688e62@[147.233.159.109]
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

At 18:24 +0300 on 13/07/1999, Steven Bradley wrote:

> I have the same problem, except that my TIMESTAMP column is not the PK;
> instead it's just a column that I wanted to index. Unfortunately, there is
> no solution since Postgres currently does not support indexes on TIMESTAMPS
> (Postgres automatically tries to create an index on all PKs) and does not
> provide JDBC access to DATETIME columns. For your particular situation you
> might try placing the TIMESTAMP column outside the PK (and not have it
> indexed) and then use a surrogate key with a sequence. This isn't entirely
> normalized, but I've seen worse!

I think I have a good solution.

The column in the database should be datetime, because that's what you can
index. Right?

The column returned from a query should be timestamp, because that's what
JDBC parses correctl. Right?

So, when you are doing something like:

SELECT the_datetime_col, other_cols
FROM the_table
WHERE the_datetime_col = 'some value';

You should put a function that converts the_datetime_col to timestamp. But
only in the returned columns! If you put a conversion function in the WHERE
clause, the index will not be used.

But how to convert? timestamp( the_datetime_col) doesn't work (Hey, it's a
bug. A function exists which is supposed to be doing this).

Well, define it yourself:

testing=> CREATE FUNCTION to_stamp( datetime ) RETURNS timestamp AS
testing-> 'SELECT timestamp_in( datetime_out( $1 ) ) WHERE $1 IS NOT NULL'
testing-> LANGUAGE 'sql';
CREATE

(I found that without WHERE clause it will bug on NULL input, so don't
leave it out).

testing=> select dt, to_stamp( dt ) as ts from test2;
dt |ts
----------------------------+----------------------
Sat May 15 13:30:00 1948 IST|1948-05-15 13:30:00+02
Wed Jan 15 16:00:00 1969 IST|1969-01-15 16:00:00+02
Sun Oct 21 02:00:00 1973 IST|1973-10-21 02:00:00+02
Tue Jul 13 14:05:00 1999 IDT|1999-07-13 14:05:00+03
(4 rows)

(dt is a datetime column).

Thus, your query should be:

SELECT to_stamp( the_datetime_col ), other_cols
FROM the_table
WHERE the_datetime_col = 'some value';

HTH,
Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Bruce Momjian 1999-07-13 16:57:24 Re: [SQL] Problem with timestamp and primary key.
Previous Message Hub.Org News Admin 1999-07-13 15:39:40