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

Quando / como as funções de expressão de valor padrão são vinculadas em relação a search_path?


Os valores padrão são analisados ​​no momento da criação (ligação antecipada!). O que você vê no psql, pgAdmin ou outros clientes é uma representação de texto, mas, na verdade, o OID da função now() no momento da criação da coluna o padrão é armazenado no catálogo do sistema pg_attrdef . Eu cito:
adbin   pg_node_tree  The internal representation of the column default value
adsrc   text          A human-readable representation of the default value

Quando você altera o search_path , que faz com que o Postgres exiba o nome da função qualificada pelo esquema, pois ela não seria mais resolvida corretamente com o search_path atual .

O despejo e a restauração não estão relacionados ao seu search_path personalizado contexto. Eles definiram explicitamente. Portanto, o que você vê não está relacionado ao ciclo de despejo/restauração.

Substituir funções integradas


Colocando public antes de pg_catalog no search_path é um jogo de azar . Usuários desprivilegiados (incluindo você) geralmente têm permissão para escrever lá e criar funções que podem anular inadvertidamente funções do sistema - com resultados arbitrários (ou maliciosos).

Você deseja um esquema dedicado com acesso restrito para substituir funções internas. Use algo assim em vez disso:
SET search_path = override, pg_catalog, public;

Detalhes neste resposta relacionada em dba.SE .