Wat doet :: in PostgreSQL?

Ik heb ::gezien op verschillende plaatsen met postgres-code die ik op het net heb gezien. Bijvoorbeeld:

SELECT '{apple,cherry apple, avocado}'::text[];

Het lijkt een soort cast te zijn. Wat is ::precies in postgres en wanneer moet het worden gebruikt?

Ik heb wat gegoogled en in de documenten van Postgres gezocht naar ::maar kreeg geen goede resultaten.
Ik heb de volgende zoekopdrachten in Google geprobeerd:

  • postgres dubbele dubbele punt
  • postgres ::
  • ::

Ik heb de volgende zoekopdrachten geprobeerd met de zoekknop van postgres docs

  • dubbele dubbele punt
  • dubbele dubbele punt cast
  • ::

Dit was bijna gênant om te vragen op SO, maar ik dacht dat Google dit antwoord hopelijk in de toekomst voor andere mensen zal zien.


Antwoord 1, autoriteit 100%

Een typecast specificeert een conversie van het ene gegevenstype naar het andere.

PostgreSQL accepteert twee equivalente syntaxis voor typecasts, de PostgreSQL-specifieke value::typeen de SQL-standaard CAST(value AS type).

In dit specifieke geval neemt '{apple,cherry apple, avocado}'::text[];de tekenreeks letterlijk {apple,cherry apple, avocado}en vertelt PostgreSQL om het te interpreteren als een array van text.

Zie de documentatie over SQL-expressiesen arraysvoor details.


Antwoord 2, autoriteit 10%

Wat @PSR en @Craig schreven.
Bovendien zijn er nog twee syntaxisvarianten:

1. type value

Dit formulier werpt alleen constanten (letterlijke tekenreeksen). Vind ik leuk in:

SELECT date '2013-03-21';

Meer in de handleiding in het hoofdstuk Constanten van andere typen.

2. type(value)

Dat is de functie-achtige syntaxis. Werkt alleen voor typen waarvan de namen geldig zijn als functienamen. Vind ik leuk in:

SELECT date(date_as_text_col) FROM tbl;

Meer in de handleiding in het hoofdstuk Typecasts.

Uitgebreider antwoord:

Other episodes