Marllos,
Não resisti, montei a função em plpython:
CREATE EXTENSION plpythonu;
CREATE OR REPLACE FUNCTION trigger_bala() RETURNS trigger LANGUAGE
plpythonu AS $$
import random
rv = plpy.execute("SELECT attname FROM pg_attribute JOIN pg_constraint ON
pg_constraint.conrelid = pg_attribute.attrelid WHERE conkey = ARRAY[attnum]
AND contype = 'p' AND pg_attribute.attrelid = '%s'::regclass" %
TD["table_name"], 1)
TD["new"][rv[0]["attname"]] = random.random()
return "MODIFY"
$$;
CREATE TABLE teste (
a float primary key
);
CREATE TRIGGER teste_bala BEFORE INSERT ON teste FOR EACH ROW EXECUTE
PROCEDURE trigger_bala();
INSERT INTO teste (a) VALUES (DEFAULT) RETURNING *;
a
----------------
0.345787825955
(1 row)
Em 10 de novembro de 2011 17:43, Marllos <[email protected]>escreveu:
> Deixa eu explicar melhor, tenho um sistema asp+firebird, que estou
> convertendo para php + firebird.
> Com o objetos pdo do php, o mesmo codigo pode acessar uma base equivalente
> em qualquer outro banco de dados (que o pdo dá suporte e são muitos bancos,
> incluindo o postgresql).
>
> Então estou tentando reproduzir fielmente a minha base de dados do
> firebird para o postgresql e isso é mais um exercicio de aprendizado com o
> postgresql. Já a conversão de asp+firebird para php não é aprendizado, é
> trabalho mesmo.
>
>
> Em 10 de novembro de 2011 16:57, Danilo Silva
> <[email protected]>escreveu:
>
>> Por curiosidade, vc quer gerar um valor aleatório ( ou outro valor
>> qualquer) para cada pk das tabelas? Se for isso, não seria mais fácil
>> utilizar uma sequence e atribuir esta sequence como valor default das pks?
>>
>> Danilo
>>
>> Em 10 de novembro de 2011 16:29, Juliano Benvenuto Piovezan <
>> [email protected]> escreveu:
>>
>> 2011/11/10 Marllos <[email protected]>
>>> >
>>> > Foi mal amigo....
>>> > Na verdade eu quero é atribuir um valor a chave primária, mas fazendo
>>> refencia dinamica a chave.
>>> >
>>>
>>> Uma coisa que posso ter passado na discussão, mas sua chave é simples
>>> ou composta?
>>>
>>> Em plpgsql você realmente não conseguirá isso, a não ser que você
>>> utilize o mesmo nome do campo em todas as tabelas. Como os nomes são
>>> diferentes, como você especificou, apenas com alguma outra pl mesmo,
>>> como pltcl. Segue exemplo:
>>>
>>> CREATE OR REPLACE FUNCTION "fun_trg" (
>>> )
>>> RETURNS trigger AS
>>> $body$
>>> spi_exec -count 1 "SELECT a.attname as col
>>> FROM pg_class c,
>>> pg_attribute a,
>>> pg_index i
>>> WHERE c.oid = i.indrelid AND
>>> a.attrelid = i.indexrelid AND
>>> not a.attisdropped AND
>>> a.attnum > 0 AND
>>> i.indisprimary AND
>>> c.oid = '$TG_relid'"
>>> spi_exec -count 1 "SELECT uuid_generate_v4() as c"
>>> set NEW($col) $c
>>> return [array get NEW]
>>> $body$
>>> LANGUAGE 'pltcl'
>>> VOLATILE
>>> CALLED ON NULL INPUT
>>> SECURITY INVOKER
>>> COST 100;
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> [email protected]
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
--
Daniel Cristian Cruz
クルズ クリスチアン ダニエル
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral