sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuándo/cómo se vinculan las funciones de expresión de valor predeterminado con respecto a search_path?

Los valores predeterminados se analizan en el momento de la creación (enlace anticipado). Lo que ve en psql, pgAdmin u otros clientes es una representación de texto pero, de hecho, el OID de la función now() al momento de crear la columna por defecto se almacena en el catálogo del sistema pg_attrdef . Cito:

adbin   pg_node_tree  The internal representation of the column default value
adsrc   text          A human-readable representation of the default value

Cuando cambia el search_path , que hace que Postgres muestre el nombre de la función calificada por el esquema, ya que ya no se resolvería correctamente con la search_path actual .

El volcado y la restauración no están relacionados con su search_path personalizado ajuste. Lo establecieron explícitamente. Entonces, lo que ve no está relacionado con el ciclo de volcado/restauración.

Anular funciones integradas

Colocando public antes de pg_catalog en la search_path es un juego de azar . A los usuarios desfavorecidos (incluyéndote a ti) a menudo se les permite escribir allí y crear funciones que pueden anular inadvertidamente las funciones del sistema, con un resultado arbitrario (o malicioso).

Quiere un esquema dedicado con acceso restringido para anular las funciones integradas. Usa algo como esto en su lugar:

SET search_path = override, pg_catalog, public;

Detalles en este respuesta relacionada en dba.SE .