Operador não existe: interval> inteiro

votos
4

Eu tenho uma consulta que funciona no PostgreSQL 7.4, mas não no PostgreSQL 8.3 com o mesmo banco de dados.

Inquerir:

SELECT * FROM login_session WHERE (now()-modified) > timeout;

Obtém o seguinte erro:

ERROR:  operator does not exist: interval > integer
LINE 1: ...ELECT * FROM login_session WHERE (now()-modified) > timeout ...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

Coluna modifiedé um timestampe timeouté um integer.

Há algumas configurações que eu preciso mudar no servidor?

Estou instalando um pedido de um cliente no novo servidor (Ubuntu) então não posso mudar consultas no aplicativo.

Publicado 14/11/2008 em 15:30
fonte usuário
Em outras línguas...                            


3 respostas

votos
7

Há uma série de mudanças entre 7,4 e 8,3. Algumas das mais drásticas foram a remoção de alguns moldes automáticos.

Suponho que o "timeout" é em segundos? Se assim for, você poderia alterar a consulta para:

SELECT
    *
FROM
    login_session
WHERE
    (CURRENT_TIMESTAMP - modified) > (timeout * '1 sec'::interval);
Respondeu 14/11/2008 em 16:27
fonte usuário

votos
2

create or replace function int2interval (x integer) returns interval as $$ select $1*'1 sec'::interval $$ language sql;
create cast (integer as interval) with function int2interval (integer) as implicit;

deve fazê-lo.

Respondeu 14/11/2008 em 16:39
fonte usuário

votos
1
CREATE OR REPLACE FUNCTION intToInterval(arg integer)
  RETURNS interval AS
$BODY$
   BEGIN      
      return CAST( arg || ' seconds' AS interval ); 
   END;
$BODY$
  LANGUAGE 'plpgsql';

CREATE CAST (integer AS interval)
WITH FUNCTION intToInterval ( integer )
AS IMPLICIT;

(Tempo limite Assumindo que é medido em segundos - alterar em conformidade o contrário)

Respondeu 14/11/2008 em 16:47
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more