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

Volání funkce PostgreSQL

O tom rozhodují pravidla Rozlišení typu funkce . Podrobné vysvětlení v návodu. Související:

  • Existuje způsob, jak zakázat přetěžování funkcí v Postgresu

NULL bez explicitního přetypování začíná jako typ "unknown":

SELECT pg_typeof(NULL)

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

Ve skutečnosti Dostal jsem podezření a provedl jsem rychlý test, abych našel různé výsledky v Postgres 9.3 a 9.4. varchar je vybráno přes integer (což kupodivu odporuje vašim zjištěním):

SQL Fiddle.

Domnívám se, že odpovídající pravidlo je bod 4e v seznamu (žádný z dřívějších bodů nerozhoduje zápas):

Na každé pozici vyberte kategorii řetězce, pokud některý kandidát tuto kategorii akceptuje. (Toto zkreslení vůči řetězci je vhodné, protože literál neznámého typu vypadá jako řetězec.)

Pokud jste přidali další funkci s typem vstupu text do přetíženého mixu, text bude vybrán přes varchar .

Osobně téměř vždy použijte text místo varchar . I když je binárně kompatibilní (takže téměř, ale ne úplně stejné), text je v každém ohledu blíže srdci Postgresu.

Přidal jsem to k houslím a také další příklad, kdy se Postgres nemůže rozhodnout a vzteká se.

Pokud chcete vybrat konkrétní funkci, přidejte explicitní typ přetypování (tady je způsob!):

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



  1. Jsou postgresové indexy JSON dostatečně účinné ve srovnání s klasickými normalizovanými tabulkami?

  2. CHOP s INSERT INTO prostřednictvím připravených výpisů

  3. PostgreSQL - Přidejte klíč ke každému objektu pole JSONB

  4. Kontingenční tabulky v MySQL