# PostgreSQL

> Konnektor für PostgreSQL. Preview — Lesen mit Filterunterstützung, Schreiben nicht unterstützt.

---

Site [llms.txt](/llms.txt)

---

> **Preview**
>
> Der PostgreSQL-Konnektor ist als **Vorabversion** eingestuft. Lesen ist funktionsfähig,
> Schreiben wird nicht unterstützt. Vor einem produktiven Einsatz bitte WYSA kontaktieren.



Der PostgreSQL-Konnektor ermöglicht das Lesen von Daten aus **PostgreSQL**-Datenbanken
und deren Übertragung in andere Systeme.

| Eigenschaft | Wert |
|---|---|
| Lesen | ⚠️ Preview |
| Schreiben | — nicht unterstützt |
| Job-Filter | ✅ wird als `WHERE`-Klausel übernommen |
| Status | Preview |

Wie beim [MSSQL-Konnektor](../mssql/) wird der Inhalt des Feldes `Filter` am Job — nach
Ersetzung des Platzhalters `%watermark%` — wörtlich hinter `WHERE` eingesetzt. Ohne Eintrag
im Feld `Filter` entsteht keine `WHERE`-Klausel und der Job liest bei jedem Lauf die
vollständige Tabelle. Der Ausdruck muss gültiges PostgreSQL-SQL sein; es findet keine
Parametrisierung statt. Details zur Filter-Syntax siehe [MSSQL — Filter](../mssql/#filter--die-where-klausel-kommt-aus-dem-job).

> **Schreiben wird nicht unterstützt**
>
> Ein PostgreSQL-System als `TargetConnection` führt zur Laufzeit zu einem Abbruch. Der
> Konnektor ist ausschließlich als Quellsystem einsetzbar. Auch das Löschen von Datensätzen
> ist nicht implementiert.



---

## Verbindungsparameter

```json
{
  "connectionstring": "<PostgreSQL Connection String>"
}
```

Beispiel (Npgsql-Format):

```
Host=<server>;Database=<db>;Username=<user>;Password=<password>;
```

### Optionale Parameter

| Parameter | Standardwert | Beschreibung |
|---|---|---|
| `commandTimeOut` | `30` | Zeitlimit für einzelne SQL-Befehle in Sekunden |
| `maxPageSize` | `5000` | Anzahl Datensätze je Seite. Steuert `LIMIT` und `OFFSET` der erzeugten Abfrage. |
| `language` | `de-DE` | Kultur, in der gelesene Zahlen- und Datumswerte formatiert werden |
| `keyVaultUrl` | *(leer)* | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |

---

## Tabellen- und Feldnamen

| Einstellung | Wert |
|---|---|
| SourceTable | Tabellenname, ggf. mit Schema-Präfix (z. B. `public.customers`) |
| SourceField | Spaltenname (in PostgreSQL üblicherweise Kleinbuchstaben) |

Der Wert aus `SourceTable` wird unverändert hinter `FROM` eingesetzt.

---

## Änderungserkennung (Watermark)

| Eigenschaft | Wert |
|---|---|
| WatermarkType | `date` oder `datetime` |
| WatermarkField | Name der Zeitstempel-Spalte |

Die Spalte aus `WatermarkField` wird zusätzlich zu den gemappten Feldern abgefragt und für
die Sortierung (`ORDER BY … ASC`) verwendet.

> **Empfehlung: echtes Datum als Watermark-Spalte**
>
> Geeignet sind `timestamp`, `timestamptz` und `date` — der Wert wird dann als
> ISO-Zeitstempel weitergereicht. Eine Spalte anderen Typs, etwa `bigint` oder `xid`, führt
> nicht mehr zu einem Abbruch, wird aber unverändert über `ToString()` weitergegeben.



---

## Datentypen — gelesene Werte

Da Schreiben nicht unterstützt wird, ist allein der Lesepfad relevant. Der Typ ergibt sich
aus dem ADO.NET-Spaltentyp; der so ermittelte Typname wird zusammen mit dem formatierten
Wert an den Zielkonnektor weitergereicht und dort für die Auswahl der Umwandlung
verwendet.

| ADO.NET-Spaltentyp | Weitergegebener Typ | Formatierung des Wertes |
|---|---|---|
| `Int32` | `int32` | Wird als Ganzzahl gelesen und in der Kultur aus `language` ausgegeben |
| `Decimal` | `decimal` | Wird als Dezimalzahl gelesen und in der Kultur aus `language` ausgegeben |
| `Double` | `double` | Wie `Decimal` — Umwandlung über einen Dezimalwert |
| `DateTime` | `datetime` | Format `u`, also `yyyy-MM-dd HH:mm:ssZ` |
| alle übrigen | Name des .NET-Typs (z. B. `string`, `boolean`, `guid`) | Unveränderte Textdarstellung |

Zahlen werden in der Kultur der **Quellverbindung** formatiert. Steht dort der Vorgabewert
`de-DE`, wird ein Komma als Dezimaltrennzeichen ausgegeben — für Zielumwandlungen, die
einen Textwert zwingend als `en-US` lesen, ist `language` entsprechend anzupassen.

Welche Quelltypen ein Zielsystem akzeptiert, steht auf der jeweiligen Zielkonnektor-Seite:
[D365BC](../d365bc/), [D365CE](../d365ce/), [D365NAV](../d365nav/).
