PostgreSQL-Array-Indizes so anpassen, dass sie bei 1 beginnen
Die Flexibilität von PostgreSQL ermöglicht Arrays mit Indizes, die nicht bei der Standard-1 beginnen. Beispielsweise werden die Elemente des folgenden Arrays von 5 bis 7 indiziert:
SELECT '[5:7]={1,2,3}'::int[];
Der Zugriff auf das erste Element erfordert die Verwendung von Index 5:
SELECT ('[5:7]={1,2,3}'::int[])[5];
Viele Benutzer bevorzugen jedoch Arrays mit Indizes, die bei 1 beginnen. So erreichen Sie dies:
SELECT ('[5:7]={1,2,3}'::int[])[array_lower('[5:7]={1,2,3}'::int[], 1):array_upper('[5:7]={1,2,3}'::int[], 1)];
Dadurch wird das Array-Slice vom niedrigsten zum höchsten Index extrahiert, wodurch die Indizierung effektiv zurückgesetzt wird.
Ein besser lesbarer Ansatz mit einem Common Table Expression (CTE):
WITH cte(a) AS (SELECT '[5:7]={1,2,3}'::int[]) SELECT a[array_lower(a, 1):array_upper(a, 1)] FROM cte;
Für PostgreSQL 9.6 und höher gibt es eine vereinfachte Methode: Weglassen der Unter- und Obergrenzen in der Slice-Spezifikation:
SELECT my_arr[:];
In unserem Beispiel verbessern Klammern die Lesbarkeit:
SELECT ( '[5:7]={1,2,3}'::int[] )[:];
Dieser Ansatz ist effizient und funktioniert auch in Postgres-Versionen vor 9.6 gut.
Das obige ist der detaillierte Inhalt vonWie normalisiere ich PostgreSQL-Array-Indizes so, dass sie bei 1 beginnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!