Consulta sobre funciones en la version 8.3.1

Lists: pgsql-es-ayuda
From: "Diego Ayala" <netdiego81(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Consulta sobre funciones en la version 8.3.1
Date: 2008-03-31 13:01:38
Message-ID: 6b81cb150803310601m37f30ca0mc8580b2b133153f2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

buenos dias a todos, quiero comentarles sobre una experiencia q tuve este
fin de semana con la nueva versión de PostgreSQL 8.3.1, en la actualidad en
mi servidor de producción tengo instalado la versión 8.2.3 que funciona muy
bien, el caso es que instale en un nuevo servidor la versión 8.3.1 de 64
bits RHEL5, restaure el backup de mi base de datos, y todo bien, sin
problemas, pero cuando probe este sentencia me salio el siguiente error:

select substr(current_date,1,4)

ERROR: no existe la función substr(date, integer, integer)
LINE 1: select substr(current_date,1,4)
^
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
desear agregar conversión explícita de tipos.

Entiendo que no se puede realizar un substr de current_date, ya que
casteando si ejecuta la sentencia

select substr(current_date::text,1,4)

2008

sin embargo en la version 8.2.3 al ejecutar esta misma sentencia lo hace sin
necesidad de realizar el cast.

select substr(current_date,1,4)

2008

la consulta que tengo es, en esta nueva versión 8.3.1, ya valida que no se
realice un substr de current_date, ?? conocen algunas otras funciones que
cambian respecto a su funcionamiento ? con versiones anteriores del
PostgreSQL 8.3.1

Gracias por su ayuda de antemano..

--
Diego Ayala


From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Diego Ayala <netdiego81(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre funciones en la version 8.3.1
Date: 2008-04-01 15:39:59
Message-ID: 525072.1050.qm@web63710.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda


--- Diego Ayala <netdiego81(at)gmail(dot)com> escribió:

> buenos dias a todos, quiero comentarles sobre una
> experiencia q tuve este
> fin de semana con la nueva versión de PostgreSQL
> 8.3.1, en la actualidad en
> mi servidor de producción tengo instalado la versión
> 8.2.3 que funciona muy
> bien, el caso es que instale en un nuevo servidor la
> versión 8.3.1 de 64
> bits RHEL5, restaure el backup de mi base de datos,
> y todo bien, sin
> problemas, pero cuando probe este sentencia me salio
> el siguiente error:
>
> select substr(current_date,1,4)
>
> ERROR: no existe la función substr(date, integer,
> integer)
> LINE 1: select substr(current_date,1,4)
> ^
> HINT: Ninguna función coincide en el nombre y tipos
> de argumentos. Puede
> desear agregar conversión explícita de tipos.
>
> Entiendo que no se puede realizar un substr de
> current_date, ya que
> casteando si ejecuta la sentencia
>
> select substr(current_date::text,1,4)
>
> 2008
>
> sin embargo en la version 8.2.3 al ejecutar esta
> misma sentencia lo hace sin
> necesidad de realizar el cast.
>
> select substr(current_date,1,4)
>
> 2008
>
> la consulta que tengo es, en esta nueva versión
> 8.3.1, ya valida que no se
> realice un substr de current_date, ?? conocen
> algunas otras funciones que
> cambian respecto a su funcionamiento ? con versiones
> anteriores del
> PostgreSQL 8.3.1
>
> Gracias por su ayuda de antemano..
>
>
> --
> Diego Ayala
>
select substr(fecha::text,1,4); puesto que siempre va
a trabajar sobre text, aun con varchar lo convertira a
text, por lo menos esto hasta el manual en español que
yo tengo

En tu caso podrias usar

Tambien existe date_part('year',fecha)

que te devuelve 2008

o

date_trunc('year',fecha)

que te 2008-01-01

Atte.
Gabriel Colina

____________________________________________________________________________________
¡Capacidad ilimitada de almacenamiento en tu correo!
No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
http://correo.espanol.yahoo.com/


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Diego Ayala" <netdiego81(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre funciones en la version 8.3.1
Date: 2008-04-02 05:31:36
Message-ID: c2d9e70e0804012231n30abfe16q6a7095e666e82359@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

2008/3/31 Diego Ayala <netdiego81(at)gmail(dot)com>:
>
> select substr(current_date,1,4)
>
> ERROR: no existe la función substr(date, integer, integer)
> LINE 1: select substr(current_date,1,4)
> ^
> HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
> desear agregar conversión explícita de tipos.
>
> Entiendo que no se puede realizar un substr de current_date, ya que
> casteando si ejecuta la sentencia
>
> select substr(current_date::text,1,4)
>
> 2008
>
> sin embargo en la version 8.2.3 al ejecutar esta misma sentencia lo hace sin
> necesidad de realizar el cast.
>

asi es, eso cambio en 8.3

http://www.postgresql.org/docs/current/static/release-8-3.html
"""
Non-character data types are no longer automatically cast to TEXT (Peter, Tom)

Previously, if a non-character value was supplied to an operator or
function that requires text input, it was automatically cast to text,
for most (though not all) built-in data types. This no longer happens:
an explicit cast to text is now required for all non-character-string
types. For example, these expressions formerly worked:

substr(current_date, 1, 4)
23 LIKE '2%'but will now draw "function does not exist" and "operator
does not exist" errors respectively. Use an explicit cast instead:

substr(current_date::text, 1, 4)
23::text LIKE '2%'
"""

>
> la consulta que tengo es, en esta nueva versión 8.3.1, ya valida que no se
> realice un substr de current_date, ??

no, lo que hace es NO realizar un cast implicito a text

> conocen algunas otras funciones que
> cambian respecto a su funcionamiento ? con versiones anteriores del
> PostgreSQL 8.3.1
>

date leida de esto
http://www.postgresql.org/docs/current/static/release-8-3.html

--
Atentamente,
Jaime Casanova


From: "Diego Ayala" <netdiego81(at)gmail(dot)com>
To: "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre funciones en la version 8.3.1
Date: 2008-04-02 11:37:54
Message-ID: 6b81cb150804020437m48fec326lad768cacabcef6e5@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Vaya, creo q me pase darle una leida a esa parte.. :-( , muchas gracias x su
ayuda..!!

2008/4/2, Jaime Casanova <systemguards(at)gmail(dot)com>:
>
> 2008/3/31 Diego Ayala <netdiego81(at)gmail(dot)com>:
>
> >
> > select substr(current_date,1,4)
> >
> > ERROR: no existe la función substr(date, integer, integer)
> > LINE 1: select substr(current_date,1,4)
> > ^
> > HINT: Ninguna función coincide en el nombre y tipos de argumentos.
> Puede
> > desear agregar conversión explícita de tipos.
> >
> > Entiendo que no se puede realizar un substr de current_date, ya que
> > casteando si ejecuta la sentencia
> >
> > select substr(current_date::text,1,4)
> >
> > 2008
> >
> > sin embargo en la version 8.2.3 al ejecutar esta misma sentencia lo hace
> sin
> > necesidad de realizar el cast.
> >
>
>
> asi es, eso cambio en 8.3
>
> http://www.postgresql.org/docs/current/static/release-8-3.html
> """
> Non-character data types are no longer automatically cast to TEXT (Peter,
> Tom)
>
> Previously, if a non-character value was supplied to an operator or
> function that requires text input, it was automatically cast to text,
> for most (though not all) built-in data types. This no longer happens:
> an explicit cast to text is now required for all non-character-string
> types. For example, these expressions formerly worked:
>
>
> substr(current_date, 1, 4)
>
> 23 LIKE '2%'but will now draw "function does not exist" and "operator
> does not exist" errors respectively. Use an explicit cast instead:
>
>
> substr(current_date::text, 1, 4)
>
> 23::text LIKE '2%'
>
> """
>
> >
> > la consulta que tengo es, en esta nueva versión 8.3.1, ya valida que no
> se
> > realice un substr de current_date, ??
>
>
> no, lo que hace es NO realizar un cast implicito a text
>
>
> > conocen algunas otras funciones que
> > cambian respecto a su funcionamiento ? con versiones anteriores del
> > PostgreSQL 8.3.1
> >
>
>
> date leida de esto
> http://www.postgresql.org/docs/current/static/release-8-3.html
>
> --
> Atentamente,
>
> Jaime Casanova
>

--
Diego Ayala


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Diego Ayala <netdiego81(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre funciones en la version 8.3.1
Date: 2008-04-02 16:01:43
Message-ID: 20080402160142.GE29172@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Diego Ayala escribió:
> buenos dias a todos, quiero comentarles sobre una experiencia q tuve este
> fin de semana con la nueva versión de PostgreSQL 8.3.1, en la actualidad en
> mi servidor de producción tengo instalado la versión 8.2.3 que funciona muy
> bien, el caso es que instale en un nuevo servidor la versión 8.3.1 de 64
> bits RHEL5, restaure el backup de mi base de datos, y todo bien, sin
> problemas, pero cuando probe este sentencia me salio el siguiente error:
>
> select substr(current_date,1,4)

Pesima idea. Mejor usa extract:

select extract(year from current_date)
select extract('year' from current_date)
(no me acuerdo cual es la forma correcta)

Un problema del substr() es que si cambias el DateStyle, te puede entregar
un valor totalmente distinto.

La verdad es que los casts automaticos a texto eran una idea muy mala
porque te permitia malas practicas como lo que muestras. La nueva
version te tira un error haciendo que tu codigo tenga que escribirse en
forma mas correcta. Obs: obviamente "corregir" el problema por la via
de agregar un cast explicito a texto es una idea algo tonta.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support