PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Kiedy / jak są powiązane funkcje wyrażeń wartości domyślnej w odniesieniu do search_path?

Wartości domyślne są analizowane w czasie tworzenia (wczesne wiązanie!). To, co widzisz w psql, pgAdmin lub innych klientach, to reprezentacja tekstowa, ale w rzeczywistości OID funkcji now() w momencie tworzenia kolumny domyślna jest przechowywana w katalogu systemowym pg_attrdef . Cytuję:

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

Po zmianie search_path , co powoduje, że Postgres wyświetla nazwę funkcji zakwalifikowanej do schematu, ponieważ nie byłaby już poprawnie rozwiązana z bieżącą search_path .

Zrzuty i przywracanie nie dotyczą Twojej niestandardowej search_path ustawienie. Ustalili to wprost. Więc to, co widzisz, nie jest związane z cyklem zrzutu/przywracania.

Zastąp wbudowane funkcje

Umieszczanie public przed pg_catalog w search_path to gra hazardowa . Nieuprzywilejowani użytkownicy (w tym Ty) często mogą tam pisać i tworzyć funkcje, które mogą nieumyślnie unieważnić funkcje systemowe - z dowolnym (lub złośliwym) wynikiem.

Potrzebujesz dedykowanego schematu z ograniczonym dostępem do zastąpienia funkcji wbudowanych. Zamiast tego użyj czegoś takiego:

SET search_path = override, pg_catalog, public;

Szczegóły w tym powiązana odpowiedź na dba.SE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL dla stronicowania z wieloma kolumnami; zrozumieć operatora OR

  2. Pula połączeń Postgresql w Erlang

  3. Aplikacja Simple Rails:Błąd nie może odwiedzić liczby całkowitej

  4. Jak wstawiać i usuwać dane w PostgreSQL

  5. Oracle do PostgreSQL:powody migracji