Lists: | pgsql-es-ayuda |
---|
From: | "Urko" <urko(at)7itria(dot)com> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Problema con ordenar ignora espacios |
Date: | 2006-01-25 12:29:08 |
Message-ID: | 000101c621aa$f0976b50$2c001aac@PcUrko |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Buenos dias y gracias de antemano
Cuando accedo a los datos ya sea desde el open office o el pgadmin
PABLO MARTIN DIAZ
SILVIA MARTIN ESCUDERO
CLAUDIA MARTINEZ VILLA
JESUS MARTIN FERNANDEZ
JULIA MARTIN GARCIA
Lo unico que he concluido es que ignora los espacios.
Es eso posible, se puede desactivar de alguna forma
si podeis ayudarme muchisimas gracias
la bse de datos esta en postgres 8.0.1 y en UNICODE pero no uso caracteres
acentuados ni que no sean los standard
Urko
From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Urko <urko(at)7itria(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Problema con ordenar ignora espacios |
Date: | 2006-01-25 13:37:23 |
Message-ID: | 20060125133723.GA996@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Urko escribió:
> Buenos dias y gracias de antemano
Buenos dias, de nada de antemano.
> Cuando accedo a los datos ya sea desde el open office o el pgadmin
>
> PABLO MARTIN DIAZ
> SILVIA MARTIN ESCUDERO
> CLAUDIA MARTINEZ VILLA
> JESUS MARTIN FERNANDEZ
> JULIA MARTIN GARCIA
>
> Lo unico que he concluido es que ignora los espacios.
Efectivamente; y no es solo Postgres, sino que cualquier programa que
ordene hara esto (programas decentes por supuesto. Siempre es factible
encontrar programas mal hechos que simplemente comparan bytes). Por
ejemplo, sort entrega esto:
$ sort < entrada
MARTIN DIAZ
MARTIN ESCUDERO
MARTINEZ VILLA
MARTIN FERNANDEZ
MARTIN GARCIA
(le tuve que quitar los nombres del principio, pues es obvio que el
ordenamiento lo hiciste asi). Esto sucede porque la definicion de
ordenamiento esta definido de esta manera en la biblioteca C, es decir
es parte del "sistema operativo" y no es realmente culpa de Postgres.
Con sort puedes decirle que use solamente el primer "campo":
$ sort -k1,1 < entrada
MARTIN DIAZ
MARTIN ESCUDERO
MARTIN FERNANDEZ
MARTIN GARCIA
MARTINEZ VILLA
cosa que, hasta donde se, no se puede hacer con Postgres.
> Es eso posible, se puede desactivar de alguna forma
Creo que lo que deberias hacer es normalizar la base de datos, separando
los apellidos maternos de los paternos; esto ademas te salvara el culo
cuando tengas que comparar apellidos compuestos como "DEL RIO" con "DE
LA FUENTE" y "DÉLANO", puesto que el listado ordenado debe ser
DE LA FUENTE
DÉLANO
DEL RIO
y por lo tanto no es simple cosa de decirle que no ignore los espacios,
porque te daria este otro resultado:
$ LC_ALL=C sort < entrada
DE LA FUENTE
DEL RIO
DÉLANO
cosa que evidentemente no es correcta.
De nada a posteriori,
--
Alvaro Herrera Developer, http://www.PostgreSQL.org
Al principio era UNIX, y UNIX habló y dijo: "Hello world\n".
No dijo "Hello New Jersey\n", ni "Hello USA\n".
From: | Ricardo David Carrillo Sánchez <rcarrillosmx(at)yahoo(dot)com(dot)mx> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Ayuda en creacion de trigger |
Date: | 2006-01-25 19:30:37 |
Message-ID: | 20060125193037.22389.qmail@web31011.mail.mud.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Hola a todos!!!,
Directo al grano, he tratado desde hace un pa de dìas
el realizar un trigger que me registre los movimientos
realizados en ciertas tablas, ahora bien, al realiarlo
como viene en los ejemplos de la documentacion online
y otros documentos que encontre respeto al tema, esto
es lo que pude realizar:
DROP TABLE ejemplo;
CREATE TABLE ejemplo
(
nombre text,
apellido text
);
CREATE FUNCTION audita() RETURNS trigger AS '
DECLARE
log_db record;
BEGIN
IF TG_OP="DELETE" THEN
INSERT INTO log_db
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(),OLD.nombre,now(),TG_RELNAME,TG_OP);
ELSE
INSERT INTO log_db
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(),NEW.nombre,now(),TG_RELNAME,TG_OP);
END IF;
RETURN NEW;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER ejemplo BEFORE INSERT OR DELETE OR
UPDATE ON ejemplo
FOR EACH ROW EXECUTE PROCEDURE audita();
para lo cual me manda un error del siquiente tipo:
DROP TABLE
CREATE TABLE
psql:otro-trigger.psql:19: ERROR: syntax error at or
near "$1" at character 14
QUERY: INSERT INTO $1
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(), $2 ,now(), $3 , $4 )
CONTEXT: SQL statement in PL/PgSQL function "audita"
near line 5
psql:otro-trigger.psql:19: LINE 1: INSERT INTO $1
(usuario,registro,fechayh,tabla,opera) valu...
psql:otro-trigger.psql:19: ^
psql:otro-trigger.psql:22: ERROR: function audita()
does not exist
Por otro lado probe el ejemplo que viene en la
documentaciòn y de igual forma no me lo acepta :
CREATE TABLE empleados (
empleado_nombre text NOT NULL,
salario integer
);
CREATE TABLE empleados_audit(
operacion char(1) NOT NULL,
horafecha timestamp NOT NULL,
userid text NOT NULL,
empleado_nombre text NOT NULL,
salario integer
);
CREATE OR REPLACE FUNCTION procesa_empleados_audit()
RETURNS TRIGGER AS '
BEGIN
--
-- Crea un registro en empleado_audit para
reflejar las operaciones
-- realizadas en empleados utiliza las variables
especiales TG_OP
-- para efectuar la operación
IF (TG_OP == "DELETE") THEN
INSERT INTO empleados_audit SELECT "D",
now(), user, OLD.*;
RETURN OLD;
ELSIF (TG_OP == "UPDATE") THEN
INSERT INTO empleados_audit SELECT "U",
now(), user,
NEW.empleado_nombre,
NEW.salario;
RETURN NEW;
ELSIF (TG_OP == "INSERT") THEN
INSERT INTO empleados_audit SELECT "I",
now(), user, NEW.*;
RETURN NEW;
END IF;
RETURN NULL; -- el resultado es ignorado puesto
que este
-- es un trigger AFTER
END;
' language plpgsql;
CREATE TRIGGER empleados_audit AFTER INSERT OR UPDATE
OR
DELETE ON empleados FOR EACH ROW EXECUTE
PROCEDURE
procesa_empleados_audit();
En verdad agradecerìa mucho cualquier orientación.
saludos.
:::::::::::::::::::::::::::::::::::::::::::::::
:: El éxito es una suma de fracasos..... ::
:: el secreto está en no acostubrase a ambos ::
:::::::::::::::::::::::::::::::::::::::::::::::
___________________________________________________________
Do You Yahoo!?
La mejor conexión a Internet y <b >2GB</b> extra a tu correo por $100 al mes. http://net.yahoo.com.mx
From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Ricardo David Carrillo Sánchez <rcarrillosmx(at)yahoo(dot)com(dot)mx> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Ayuda en creacion de trigger |
Date: | 2006-01-25 21:04:09 |
Message-ID: | 20060125210409.GB6045@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Ricardo David Carrillo Sánchez escribió:
> CREATE FUNCTION audita() RETURNS trigger AS '
> DECLARE
> log_db record;
> BEGIN
> IF TG_OP="DELETE" THEN
> INSERT INTO log_db
> (usuario,registro,fechayh,tabla,opera) values
> (getpgusername(),OLD.nombre,now(),TG_RELNAME,TG_OP);
> ELSE
> INSERT INTO log_db
> (usuario,registro,fechayh,tabla,opera) values
> (getpgusername(),NEW.nombre,now(),TG_RELNAME,TG_OP);
> END IF;
> RETURN NEW;
> END;
> ' LANGUAGE plpgsql;
No entiendo que es lo que pretendes con el INSERT INTO apuntando a un
record. Supongo que quisiste poner un nombre de tabla ahi?
> Por otro lado probe el ejemplo que viene en la
> documentaciòn y de igual forma no me lo acepta :
Y cual es el error?
--
Alvaro Herrera Developer, http://www.PostgreSQL.org
"En las profundidades de nuestro inconsciente hay una obsesiva necesidad
de un universo lógico y coherente. Pero el universo real se halla siempre
un paso más allá de la lógica" (Irulan)