Hoppa till innehållet
Stackship-dokumentation English

PostgreSQLAnvändareMaskinöversatt

Anslut till ett kluster

Hämta ett klusters anslutningssträng, välj URI- eller nyckel=värde-formen och ge den till en arbetslast via ett valv — direkt, via poolern eller till replikerna.

Kräver: postgrescluster/readSecrets

Ett klusters anslutningssträng innehåller dess lösenord, så för att läsa den behöver du behörigheten postgrescluster/readSecrets; rollerna Owner, Contributor och Databases Operator har den. Varje gång strängen läses registrerar klustrets Aktivitet vem som läste den.

Hämta anslutningssträngen

I klustrets Översikt, under Åtkomstdetaljer, väljer du Visa anslutningssträng vid Anslutningssträng och kopierar den. Dölj anslutningssträng döljer den igen.

När klustret är exponerat utanför Kubernetes-klustret innehåller Extern anslutningssträng samma inloggningsuppgifter med lastbalanserarens adress. Där står Extern adress provisioneras… tills lastbalanseraren har fått en — se Nätverksåtkomst.

Med CLI:t:

bash
stsh pg connstr orders-db                  # båda formerna
stsh pg connstr orders-db --raw            # bara URI:n, för att skicka vidare i en pipe
stsh pg connstr orders-db --external       # via lastbalanseraren

Via API:t: GET .../resources/postgresclusters/<name>/connectionstring och .../connectionstring/external.

De två formerna

Plattformen ger anslutningssträngen i två former. Portalen visar den första; API:t och CLI:t returnerar båda.

Form Fält Ser ut som För
URI connectionString postgresql://orders:<password>@orders-db-rw.<namespace>:5432/orders psql och andra libpq-baserade klienter, psycopg, pgx, node-postgres
nyckel=värde keyValueConnectionString Host=orders-db-rw.<namespace>;Port=5432;Database=orders;Username=orders;Password=<password> .NET och Npgsql

Npgsql kan inte läsa URI:n: med en sådan misslyckas den med Format of the initialization string does not conform to specification. Ge ett .NET-program nyckel=värde-formen. I URI:n är lösenordet procentkodat; i nyckel=värde-formen är det inte det.

De externa strängarna heter externalConnectionString och externalKeyValueConnectionString; båda är tomma så länge lastbalanseraren saknar adress.

Vad strängen pekar på

  • Användare — databasens ägare, som heter som databasen.
  • Värd — <cluster>-rw.<namespace>, läs- och skrivtjänsten i klustrets resursgrupp. Den leder alltid till den aktuella primära instansen, även efter en failover.
  • Port — 5432.
  • Databas — databasen som klustret skapades med.

Värdnamnet går att slå upp för arbetslaster på samma Kubernetes-kluster. Om en arbetslast faktiskt får ansluta avgörs av nätverksreglerna — se Nätverksåtkomst.

TLS

Klustret avvisar varje anslutning som inte använder TLS och tar som standard bara emot TLS 1.3. De flesta drivrutiner försöker med TLS först; gör inte din det, slå på det, till exempel med sslmode=require i en URI eller SSL Mode=Require i en nyckel=värde-sträng. Serverns certifikat är utfärdat av klustrets egen certifikatutfärdare, som plattformen inte lämnar ut, så en klient som är inställd på att verifiera certifikatet mot en känd utfärdare kan inte ansluta.

Kravet är PostgreSQL:s eget. PgBouncer-poolern är en separat server, och plattformen ställer inte in den på att avvisa klienter utan TLS — se Via poolern.

Ge en arbetslast anslutningssträngen

Förvara strängen i ett valv i stället för i en arbetslasts inställningar:

  1. Lägg till den som en hemlighet i ett valv — se Lägg till en hemlighet. Välj den form som arbetslastens drivrutin läser.
  2. Referera till hemligheten från arbetslasten och ge arbetslastens identitet Secrets Reader på valvet:

Strängen är densamma under hela klustrets livstid, även efter en återställning från en ögonblicksbild. En blueprint som deklarerar en databas skriver dess anslutningsuppgifter till blueprintens eget valv — se Hanterade resurser.

Via poolern

Med PgBouncer påslaget har klustret en poolertjänst, <cluster>-pooler-rw, i samma resursgrupp. Anslutningssträngen använder den inte: för att gå via poolern byter du värden <cluster>-rw mot <cluster>-pooler-rw och behåller resten — samma användare, lösenord, port och databas.

Viktigt

Plattformen ställer inte in poolern på att kräva TLS av sina klienter. Slå på TLS i varje klient som går via poolern, till exempel med sslmode=require, så att lösenordet inte går okrypterat över nätverket.

I läget Transaction och Statement delas en serveranslutning mellan klienter från en transaktion eller sats till nästa, så sessionstillstånd — SET, förberedda satser, advisory locks, temporära tabeller — följer inte med. Använd läget Session för program som är beroende av det.

Läs från replikerna

Två tjänster till leder till klustret, med samma inloggningsuppgifter:

  • <cluster>-r — vilken instans som helst, den primära inräknad. Översikt visar den som Lästjänst.
  • <cluster>-ro — bara replikerna.

Replikerna tillämpar den primäras ändringar en kort stund efter att den gjort dem, så en läsning från en replik kan missa en skrivning som gjordes precis innan. Se Instanser och hög tillgänglighet.