PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

usando esquemas no postgresql


O parâmetro que você está procurando é search_path - que lista os esquemas que uma consulta examinará. Então, você pode fazer algo como:
CREATE TABLE schema1.tt ...
CREATE TABLE schema2.tt ...
CREATE FUNCTION schema1.foo() ...
CREATE FUNCTION schema2.foo() ...
SET search_path = schema1, something_else;
SELECT * FROM tt;        -- schema1.tt
SELECT * FROM schema2.tt -- schema2.tt
SELECT foo();            -- calls schema1.foo
SELECT schema2.foo();    -- calls schema2.foo

Observe que, se o plano de uma consulta for salvo dentro do corpo de foo(), você poderá obter resultados inesperados. Eu recomendo que você sempre liste explicitamente esquemas para tabelas referenciadas em funções plpgsql se estiver usando tabelas duplicadas. Caso contrário, certifique-se de ter testes em vigor para verificar o comportamento com um search_path em mudança.

Oh - você pode definir explicitamente search_path para o corpo de uma função também - veja a referência CREATE FUNCTION do manual para obter detalhes.