2009/9/4 JotaComm <[email protected]>
> Olá,
>
> Segue a minha solução:
>
> CREATE OR REPLACE FUNCTION change_owner(TEXT,TEXT)
> RETURNS boolean AS $$
> DECLARE
> comando TEXT;
> lista RECORD;
> BEGIN
> FOR lista IN
> SELECT pg_namespace.nspname,pg_class.relname,pg_class.relkind
> FROM pg_namespace JOIN pg_class ON
> pg_namespace.oid=pg_class.relnamespace
> WHERE pg_namespace.nspname=$1
> AND pg_class.relkind IN (‘r’,‘v’,‘S’)
> LOOP
> IF lista.relkind=‘S’ THEN
> comando:=‘ALTER SEQUENCE ‘ || lista.relname || ‘ OWNER TO ‘ ||
> quote_ident($2);
> RAISE NOTICE ‘‘, comando;
> ELSE
> comando:=‘ALTER TABLE ‘ || lista.relname || ‘ OWNER TO ‘ ||
> quote_ident($2);
> RAISE NOTICE ‘‘, comando;
> END IF;
> EXECUTE comando;
> END LOOP;
> IF FOUND THEN
> RETURN TRUE;
> END IF;
> RETURN FALSE;
> END;
> $$ LANGUAGE PLPGSQL;
>
Se me permites adicionar um "plus" e uns ajustes :
* alterar o dono do schema passado por parametro
* colocar o schema.tabela nos ALTER ...
* compatibilidade com versoes menores que 8.4
CREATE OR REPLACE FUNCTION change_owner(TEXT,TEXT)
RETURNS boolean AS $$
DECLARE
comando TEXT;
lista RECORD;
BEGIN
comando := 'ALTER SCHEMA ' || quote_ident($1) || ' OWNER TO ' ||
quote_ident($2);
EXECUTE comando;
FOR lista IN
SELECT pg_namespace.nspname,
pg_class.relname,
pg_class.relkind
FROM pg_namespace
JOIN pg_class ON pg_namespace.oid=pg_class.relnamespace
WHERE pg_namespace.nspname=$1
AND pg_class.relkind IN ('r','v','S')
LOOP
IF lista.relkind = 'S' AND CAST((SELECT COALESCE(setting,0) FROM
pg_settings WHERE name = 'server_version_num') AS INTEGER) >= 80400 THEN
comando := 'ALTER SEQUENCE ' || quote_ident(lista.nspname) || '.' ||
quote_ident(lista.relname) || ' OWNER TO ' || quote_ident($2);
RAISE NOTICE '%', comando;
ELSE
comando := 'ALTER TABLE ' || quote_ident(lista.nspname) || '.' ||
quote_ident(lista.relname) || ' OWNER TO ' || quote_ident($2);
RAISE NOTICE '%', comando;
END IF;
EXECUTE comando;
END LOOP;
IF FOUND THEN
RETURN TRUE;
END IF;
RETURN FALSE;
END;
$$ LANGUAGE plpgsql;
Gostei bastante dessa sua solução Jota... qdo eu precisava eu rodava um
script gerando as DDLs... assim fica mais elegante e prático...
Cordialmente,
--
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral