sql >> Databáze >  >> RDS >> PostgreSQL

Kdy / jak jsou funkce výrazu výchozí hodnoty svázány s ohledem na vyhledávací_cestu?

Výchozí hodnoty jsou analyzovány při vytváření (předčasná vazba!). To, co vidíte v psql, pgAdmin nebo jiných klientech, je textová reprezentace, ale ve skutečnosti je to OID funkce now() v době vytváření sloupce je výchozí hodnota uložena v systémovém katalogu pg_attrdef . Cituji:

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

Když změníte search_path , což způsobí, že Postgres zobrazí název funkce kvalifikované podle schématu, protože by již nebyla správně vyřešena s aktuální search_path .

Výpis a obnovení se netýkají vaší vlastní search_path nastavení. Stanovili to explicitně. Takže to, co vidíte, nesouvisí s cyklem výpisu/obnovení.

Přepsat vestavěné funkce

Umístění public před pg_catalog v search_path je hra hazardu . Neprivilegovaní uživatelé (včetně vás) tam často mohou psát a vytvářet funkce, které mohou neúmyslně potlačit systémové funkce – s libovolným (nebo škodlivým) výsledkem.

Chcete vyhrazené schéma s omezeným přístupem k přepsání vestavěných funkcí. Místo toho použijte něco takového:

SET search_path = override, pg_catalog, public;

Podrobnosti v tomto související odpověď na dba.SE .



  1. Použití intervalu v PostgreSQL s Ruby on Rails

  2. Seřazení odlišných hodnot sloupců podle (první hodnoty) jiného sloupce v agregační funkci

  3. Při INSERT do tabulky s vypočítaným sloupcem PHP/PDO dojde k chybě serveru SQL 1934

  4. Jak mohu vybrat nejnovější vstup pro každého člena?