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

Wywołanie funkcji PostgreSQL

Decydują o tym zasady Rozwiązywania typów funkcji . Szczegółowe wyjaśnienie w instrukcji. Powiązane:

  • Czy istnieje sposób na wyłączenie przeciążania funkcji w Postgresie

NULL bez jawnego rzutowania typu zaczyna się jako typ „nieznany”:

SELECT pg_typeof(NULL)

 pg_typeof
-----------
 unknown

Właściwie, Nabrałem podejrzeń i przeprowadziłem szybki test, aby znaleźć różne wyniki w Postgresie 9.3 i 9.4. varchar jest wybierany przez integer (co dziwne jest sprzeczny z twoimi ustaleniami):

Skrzypce SQL.

Myślę, że taka zasada to punkt 4e na liście (żaden z wcześniejszych punktów nie decyduje o meczu):

Na każdej pozycji wybierz kategorię ciągu, jeśli jakikolwiek kandydat akceptuje tę kategorię. (To nastawienie na łańcuch jest odpowiednie, ponieważ literał nieznanego typu wygląda jak łańcuch.)

Jeśli dodałeś inną funkcję z typem wejściowym text do przeładowanego miksu, text zostanie wybrany przez varchar .

Osobiście prawie zawsze użyj text zamiast varchar . Będąc kompatybilnym z plikami binarnymi (czyli prawie, ale nie do końca tak samo), text jest bliżej serca Postgresa pod każdym względem.

Dodałem to do skrzypiec, a także innego przykładu, w którym Postgres nie może się zdecydować i wpada w złość.

Jeśli chcesz wybrać konkretną funkcję, dodaj jawne rzutowanie typu (to jest droga!):

select test(null::int)     AS func_int
     , test(null::varchar) AS func_vc;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie PostgreSQL dla Windows, część 3

  2. Jak wymusić unikalność zestawu między wieloma kolumnami?

  3. Jak rozwiązać problemy z uprawnieniami podczas przywracania bazy danych PostgreSQL

  4. rozpakuj tablicę postgresql w wiersze

  5. Przegląd możliwości JSON w PostgreSQL