sql >> Database >  >> RDS >> PostgreSQL

Wanneer / hoe zijn standaardwaarde-expressiefuncties gebonden met betrekking tot zoekpad?

Standaardwaarden worden geparseerd bij het maken (vroege binding!). Wat u ziet in psql, pgAdmin of andere clients is een tekstweergave, maar in feite de OID van de functie now() op het moment dat de kolom wordt gemaakt, wordt de standaardwaarde opgeslagen in de systeemcatalogus pg_attrdef . Ik citeer:

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

Wanneer u de search_path , waardoor Postgres de naam van de functie schema-gekwalificeerd weergeeft, aangezien deze niet meer correct zou worden opgelost met het huidige search_path .

Dumpen en herstellen hebben geen betrekking op uw aangepaste search_path instelling. Ze stellen het expliciet. Dus wat je ziet is niet gerelateerd aan de dump / restore-cyclus.

Ingebouwde functies overschrijven

public plaatsen voor pg_catalog in het search_path is een hazardspel . Minder bevoorrechte gebruikers (inclusief uzelf) mogen daar vaak schrijven en functies maken die onbedoeld systeemfuncties kunnen overrulen - met willekeurige (of kwaadaardige) gevolgen.

U wilt een speciaal schema met beperkte toegang ingebouwde functies te negeren. Gebruik in plaats daarvan iets als dit:

SET search_path = override, pg_catalog, public;

Details in deze gerelateerd antwoord op dba.SE .



  1. Hoe maak je een afteltimer en voer je een SQL-query uit met PHP wanneer deze is voltooid?

  2. Een MySQL-datum opmaken in PHP

  3. Records ophalen met JOIN-query

  4. Hoe gefilterde indexen een krachtigere functie kunnen zijn