Freigeben über


Importieren und Exportieren von Daten mithilfe azure_storage Erweiterung in Azure Database for PostgreSQL – Flexibler Server

GILT FÜR: Azure Database for PostgreSQL – Flexibler Server

Mit der azure_storage-Erweiterung können Sie Daten in mehreren Dateiformaten importieren oder exportieren, direkt zwischen Azure Storage-Konten und einer Instanz von Azure Database for PostgreSQL Flexible Server.

Beispiele für den Datenexport und -import mithilfe dieser Erweiterung finden Sie im Abschnitt "Beispiele " dieses Artikels.

Um die azure_storage Erweiterung in Ihrer flexiblen Azure-Datenbank für PostgreSQL-Serverinstanz zu verwenden, müssen Sie die Erweiterung zum shared_preload_librariesServerparameter hinzufügen azure.extensions , wie in der Verwendung von PostgreSQL-Erweiterungen beschrieben.

Da shared_preload_library es sich um einen statischen Serverparameter handelt, muss der Server neu gestartet werden, damit die Änderung wirksam wird.

Sobald der Server neu gestartet wird, stellen Sie eine Verbindung mit Ihrer Instanz von PostgreSQL mithilfe des Clients Ihrer Vorliebe her (z. B. psql, pgAdmin usw.). Vergewissern Sie sich, dass SHOW azure.extensions;und SHOW shared_preload_libraries;beide den Wert azure_storage in der Liste der durch Kommas getrennten Werte enthalten, die SHOW von den einzelnen Anweisungen zurückgegeben werden.

Nur dann können Sie die Erweiterung installieren, indem Sie eine Verbindung mit Ihrer Zieldatenbank herstellen und die CREATE EXTENSION-Anweisung ausführen. Sie müssen den Befehl für jede Datenbank, in der die Erweiterung verfügbar sein soll, separat wiederholen.

CREATE EXTENSION azure_storage;

Übersicht über das Verfahren

  1. Identifizieren Sie die Azure Storage-Konten, mit denen Benutzer der azure_storage Erweiterung interagieren sollen.
  2. Entscheiden Sie, welche Art von Autorisierung Sie für die Anforderungen verwenden möchten, die für den BLOB-Dienst der einzelnen Azure Storage-Konten vorgenommen wurden. azure_storage extension supports authorization with Shared Key, and authorization with Microsoft Entra ID. Von diesen beiden Autorisierungstypen bietet Microsoft Entra ID eine überlegene Sicherheit und Benutzerfreundlichkeit gegenüber dem freigegebenen Schlüssel und ist der von Microsoft empfohlene. Um die erforderlichen Voraussetzungen in jedem Fall zu erfüllen, befolgen Sie die Anweisungen in den entsprechenden Abschnitten:
  3. Einschließen azure_storage in shared_preload_libraries:

Screenshot der Auswahl von azure_storage in shared_preload_libraries in Serverparametern. Da dies shared_preload_libraries statisch ist, muss der Server neu gestartet werden, damit eine Änderung wirksam wird: Screenshot des Dialogfelds, das beim Ändern shared_preload_libraries angezeigt wird, um zu speichern und neu zu starten.

  1. Einschließen azure_storage in azure.extensions:

Screenshot der Auswahl von azure_storage in azure.extensions in Serverparametern.

  1. Stellen Sie mithilfe des Clients Ihrer Vorlieben (z. B. psql, pgAdmin usw.) eine Verbindung mit einer beliebigen Datenbank in Ihrer Instanz von Azure Database for PostgreSQL Flexible Server her. Um alle SQL-Objekte (Tabellen, Typen, Funktionen, Ansichten usw.) zu erstellen, mit denen Sie die Erweiterung für die azure_storage Interaktion mit Instanzen von Azure Storage-Konten verwenden können, führen Sie die folgende Anweisung aus:
    CREATE EXTENSION azure_storage;
    
  2. Fügen Sie mithilfe der azure_storage.account_* Funktionen Verweise auf Azure Storage-Konten hinzu, die Sie PostgreSQL-Benutzern oder Rollenzugriff mit der azure_storage Erweiterung ermöglichen möchten. Diese Verweise umfassen den Namen des Azure Storage-Kontos, auf das verwiesen wird, und den Authentifizierungstyp, der bei der Interaktion mit dem Azure Storage-Konto verwendet werden soll. Je nach ausgewähltem Authentifizierungstyp müssen Sie möglicherweise auch andere Parameter angeben, z. B. den Zugriffsschlüssel des Azure Storage-Kontos oder das SAS-Token.

Wichtig

Beachten Sie bei Authentifizierungstypen, für die Sie einen Zugriffsschlüssel für ein Azure Storage-Konto angeben müssen, dass Ihre Azure Storage-Zugriffstasten einem Stammkennwort für Ihr Speicherkonto ähneln. Achten Sie immer darauf, sie zu schützen. Verwenden Sie Azure Key Vault zum sicheren Verwalten und Rotieren Ihrer Schlüssel. azure_storage erweiterung speichert diese Schlüssel in einer Tabelle azure_storage.accounts , die von Mitgliedern der pg_read_all_data Rolle gelesen werden kann.

Benutzer, die der Rolle erteilt wurden, können mit der azure_storage_admin azure_storage.accounts Tabelle mit den folgenden Funktionen interagieren:

Die azure_storage_admin Rolle wird standardmäßig der azure_pg_admin Rolle gewährt.

So verwenden Sie die Autorisierung mit der Microsoft Entra-ID

  1. Aktivieren Sie die vom System zugewiesene verwaltete Identität auf Ihrer Azure-Datenbankinstanz für Flexible Server für PostgreSQL.

Screenshot der Aktivierung der vom System zugewiesenen verwalteten Identität.

  1. Starten Sie die Instanz von Azure Database für PostgreSQL Flexible Server neu, nachdem sie eine system zugewiesene verwaltete Identität aktiviert haben.
  2. Weisen Sie rollenbasierte Zugriffssteuerungsberechtigungen (RBAC) für den Zugriff auf BLOB-Daten im Azure Storage-Konto der Instanz ihrer Instanz von Azure Database für PostgreSQL Flexible Server zu.

So verwenden Sie die Autorisierung mit freigegebenem Schlüssel

  1. Für Ihr Azure Storage-Konto muss der Zugriff auf den Speicherkontoschlüssel aktiviert sein (d. h., es kann nicht die AllowSharedKeyAccess-Eigenschaft auf "false" festgelegt sein).

Screenshot der Bestätigung, dass der Zugriff auf den Speicherkontoschlüssel aktiviert ist.

  1. Rufen Sie eine der beiden Zugriffstasten des Azure Storage-Kontos ab, um sie an die funktion azure_storage.account_add zu übergeben.

Screenshot des Kopierens des Zugriffsschlüssels für das Speicherkonto.

Functions

azure_storage.account_add

Funktion, die das Hinzufügen eines Speicherkontos und des zugehörigen Zugriffsschlüssels zur Liste der Speicherkonten ermöglicht, auf die die azure_storage Erweiterung zugreifen kann.

Wenn ein vorheriger Aufruf dieser Funktion bereits den Verweis auf dieses Speicherkonto hinzugefügt hat, wird kein neuer Eintrag hinzugefügt, sondern stattdessen der Zugriffsschlüssel des vorhandenen Eintrags aktualisiert.

Hinweis

Diese Funktion überprüft nicht, ob der Name des verwiesenen Kontos vorhanden ist oder mit der bereitgestellten Zugriffstaste darauf zugegriffen werden kann. Es überprüft jedoch, ob der Name des Speicherkontos gültig ist, entsprechend den Benennungsüberprüfungsregeln, die für Azure-Speicherkonten auferlegt werden.

azure_storage.account_add(account_name_p text, account_key_p text);

Es gibt eine überladene Version dieser Funktion, die einen account_config Parameter akzeptiert, der den Namen des referenzierten Azure Storage-Kontos und alle erforderlichen Einstellungen wie Authentifizierungstyp, Kontotyp oder Speicheranmeldeinformationen kapselt.

azure_storage.account_add(account_config jsonb);

Berechtigungen

Muss Mitglied von azure_storage_admin.

Argumente

account_name_p

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

account_key_p

text der Wert einer der Zugriffstasten für das Speicherkonto. Ihre Azure Blob Storage-Zugriffstasten ähneln einem Stammkennwort für Ihr Speicherkonto. Achten Sie darauf, die Zugriffsschlüssel immer gut zu schützen. Verwenden Sie Azure Key Vault zum sicheren Verwalten und Rotieren Ihrer Schlüssel. Der Kontoschlüssel wird in einer Tabelle gespeichert, auf die nur der Superuser zugreifen kann. Benutzer, die der azure_storage_admin Rolle erteilt wurden, können über Funktionen mit dieser Tabelle interagieren. Um zu sehen, welche Speicherkonten hinzugefügt werden, verwenden Sie die Funktion azure_storage.account_list.

account_config

jsonb der Name des Azure Storage-Kontos und alle erforderlichen Einstellungen wie Authentifizierungstyp, Kontotyp oder Speicheranmeldeinformationen. Wir empfehlen die Verwendung der Hilfsfunktionen azure_storage.account_options_managed_identity, azure_storage.account_options_credentials oder azure_storage.account_options , um einen der gültigen Werte zu erstellen, die als dieses Argument übergeben werden müssen.

Rückgabetyp

VOID

azure_storage.account_options_managed_identity

Funktion, die als Hilfsfunktion fungiert, die als Parameter innerhalb von azure_storage.account_add aufgerufen werden kann und nützlich ist, um einen gültigen Wert für das account_config Argument zu erzeugen, wenn ein System, dem eine verwaltete Identität zugewiesen ist, für die Interaktion mit dem Azure Storage-Konto verwendet wird.

azure_storage.account_options_managed_identity(name text, type azure_storage.storage_type);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

Name

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

type

azure_storage.storage_type der Wert eines der unterstützten Speichertypen. Es wird blobnur ein unterstützter Wert angegeben.

Rückgabetyp

jsonb

azure_storage.account_options_credentials

Funktion, die als Hilfsfunktion fungiert, die als Parameter innerhalb von azure_storage.account_add aufgerufen werden kann und nützlich ist, um einen gültigen Wert für das account_config Argument zu erzeugen, wenn Sie einen Azure Storage-Zugriffsschlüssel für die Interaktion mit dem Azure Storage-Konto verwenden.

azure_storage.account_options_credentials(name text, credentials text, type azure_storage.storage_type);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

Name

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

Anmeldeinformationen

text der Wert einer der Zugriffstasten für das Speicherkonto. Ihre Azure Blob Storage-Zugriffstasten ähneln einem Stammkennwort für Ihr Speicherkonto. Achten Sie darauf, die Zugriffsschlüssel immer gut zu schützen. Verwenden Sie Azure Key Vault zum sicheren Verwalten und Rotieren Ihrer Schlüssel. Der Kontoschlüssel wird in einer Tabelle gespeichert, auf die nur der Superuser zugreifen kann. Benutzer, die der azure_storage_admin Rolle erteilt wurden, können über Funktionen mit dieser Tabelle interagieren. Um zu sehen, welche Speicherkonten hinzugefügt werden, verwenden Sie die Funktion azure_storage.account_list.

type

azure_storage.storage_type der Wert eines der unterstützten Speichertypen. Es wird blobnur ein unterstützter Wert angegeben.

Rückgabetyp

jsonb

azure_storage.account_options

Funktion, die als Hilfsfunktion fungiert, die als Parameter innerhalb von azure_storage.account_add aufgerufen werden kann und nützlich ist, um einen gültigen Wert für das account_config Argument zu erzeugen, wenn Sie einen Azure Storage-Zugriffsschlüssel oder eine vom System zugewiesene verwaltete Identität verwenden, um mit dem Azure Storage-Konto zu interagieren.

azure_storage.account_options(name text, auth_type azure_storage.auth_type, storage_type azure_storage.storage_type, credentials text DEFAULT NULL);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

Name

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

auth_type

azure_storage.auth_type der Wert eines der unterstützten Speichertypen. Es werden access-keynur unterstützte Werte und managed-identity.

storage_type

azure_storage.storage_type der Wert eines der unterstützten Speichertypen. Es wird blobnur ein unterstützter Wert angegeben.

Anmeldeinformationen

text der Wert einer der Zugriffstasten für das Speicherkonto. Ihre Azure Blob Storage-Zugriffstasten ähneln einem Stammkennwort für Ihr Speicherkonto. Achten Sie darauf, die Zugriffsschlüssel immer gut zu schützen. Verwenden Sie Azure Key Vault zum sicheren Verwalten und Rotieren Ihrer Schlüssel. Der Kontoschlüssel wird in einer Tabelle gespeichert, auf die nur der Superuser zugreifen kann. Benutzer, die der azure_storage_admin Rolle erteilt wurden, können über Funktionen mit dieser Tabelle interagieren. Um zu sehen, welche Speicherkonten hinzugefügt werden, verwenden Sie die Funktion azure_storage.account_list.

Rückgabetyp

jsonb

azure_storage.account_remove

Funktion, die das Entfernen eines Speicherkontos und des zugehörigen Zugriffsschlüssels aus der Liste der Speicherkonten ermöglicht, auf die die azure_storage Erweiterung zugreifen kann.

azure_storage.account_remove(account_name_p text);

Berechtigungen

Muss Mitglied von azure_storage_admin.

Argumente

account_name_p

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

Rückgabetyp

VOID

azure_storage.account_user_add

Funktion, die es ermöglicht, einem PostgreSQL-Benutzer oder einer Rolle Zugriff auf ein Speicherkonto über die von der azure_storage Erweiterung bereitgestellten Funktionen zu gewähren.

Hinweis

Die Ausführung dieser Funktion ist nur erfolgreich, wenn das Speicherkonto, dessen Name als erstes Argument übergeben wird, bereits mit azure_storage.account_add erstellt wurde und wenn der Benutzer oder die Rolle, deren Name als zweites Argument übergeben wird, bereits vorhanden ist.

azure_storage.account_add(account_name_p text, user_p regrole);

Berechtigungen

Muss Mitglied von azure_storage_admin.

Argumente

account_name_p

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

user_p

regrole der Name eines PostgreSQL-Benutzers oder einer auf dem Server verfügbaren Rolle.

Rückgabetyp

VOID

azure_storage.account_user_remove

Funktion, die das Widerrufen eines PostgreSQL-Benutzers oder eines Rollenzugriffs auf ein Speicherkonto über die von der azure_storage Erweiterung bereitgestellten Funktionen ermöglicht.

Hinweis

Die Ausführung dieser Funktion ist nur erfolgreich, wenn das Speicherkonto, dessen Name als erstes Argument übergeben wird, bereits mit azure_storage.account_add erstellt wurde und wenn der Benutzer oder die Rolle, deren Name als zweites Argument übergeben wird, weiterhin vorhanden ist. Wenn ein Benutzer oder eine Rolle vom Server gelöscht wird, werden DROP USER | ROLEdie Berechtigungen, die für einen Verweis auf Azure Storage-Konten erteilt wurden, ebenfalls automatisch entfernt.

azure_storage.account_user_remove(account_name_p text, user_p regrole);

Berechtigungen

Muss Mitglied von azure_storage_admin.

Argumente

account_name_p

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

user_p

regrole der Name eines PostgreSQL-Benutzers oder einer auf dem Server verfügbaren Rolle.

Rückgabetyp

VOID

azure_storage.account_list

Funktion, die die Namen der Speicherkonten auflistet, die über die Funktion azure_storage.account_add konfiguriert wurden, zusammen mit den PostgreSQL-Benutzern oder -Rollen, die Berechtigungen für die Interaktion mit diesem Speicherkonto über die von der azure_storage Erweiterung bereitgestellten Funktionen erteilt haben.

azure_storage.account_list();

Berechtigungen

Muss Mitglied von azure_storage_admin.

Argumente

Diese Funktion verwendet keine Argumente.

Rückgabetyp

TABLE(account_name text, auth_type azure_storage.auth_type, azure_storage_type azure_storage.storage_type, allowed_users regrole[]) eine vierspaltige Tabelle mit der Liste der hinzugefügten Azure Storage-Konten, die Art der Authentifizierung, die für die Interaktion mit jedem Konto, den Speichertyp und die Liste der PostgreSQL-Benutzer oder -Rollen verwendet wird, die Zugriff darauf gewährt werden.

azure_storage.blob_list

Funktion, die die Namen und andere Eigenschaften (Größe, lastModified, eTag, contentType, contentEncoding und contentHash) von Blobs auflistet, die im angegebenen Container des referenzierbaren Speicherkontos gespeichert sind.

azure_storage.blob_list(account_name text, container_name text, prefix text DEFAULT ''::text);

Berechtigungen

Der Benutzer oder die Rolle, die diese Funktion aufruft, muss der Liste zugelassener Benutzer oder Rollen hinzugefügt account_name werden, indem azure_storage.account_user_add ausgeführt wird. Mitglieder von azure_storage_admin sind automatisch berechtigt, auf alle Azure Storage-Konten zu verweisen, deren Verweise mithilfe von azure_storage.account_add hinzugefügt wurden.

Argumente

account_name

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

container_name

text der Name eines Containers. Ein Container dient zum Organisieren einer Gruppe von Blobs (ähnlich wie ein Verzeichnis in einem Dateisystem). Ein Speicherkonto kann eine unbegrenzte Anzahl von Containern enthalten, und in einem Container kann eine unbegrenzte Anzahl von Blobs gespeichert werden. Ein Containername muss ein gültiger DNS-Name (Domain Name System) sein, da er Teil des eindeutigen URI ist, der zum Adressieren des Containers oder seiner BLOBs verwendet wird. Achten Sie beim Benennen eines Containers darauf, diese Regeln zu befolgen.

Der URI für einen Container ähnelt https://myaccount.blob.core.windows.net/mycontainer.

prefix

text wenn angegeben, gibt die Funktion die Blobs zurück, deren Namen mit dem in diesem Parameter angegebenen Wert beginnen. Standardmäßig wird eine leere Zeichenfolge verwendet.

Rückgabetyp

TABLE(path text, bytes bigint, last_modified timestamp with time zone, etag text, content_type text, content_encoding text, content_hash text) eine Tabelle mit einem Datensatz pro blob, der zurückgegeben wird, einschließlich des vollständigen Namens des Blobs und einiger anderer Eigenschaften.

path

text den vollständigen Namen des Blobs.

Byte

bigint die Größe des Blobs in Byte.

last_modified

timestamp with time zoneDatum und Uhrzeit der letzten Änderung des Blobs. Durch jeden Vorgang, der das BLOB ändert, einschließlich eines Updates der Metadaten oder Eigenschaften des BLOB, wird die Uhrzeit der letzten Änderung aktualisiert.

etag

text Die ETag-Eigenschaft wird für optimistische Parallelität während Updates verwendet. Es handelt sich nicht um einen Zeitstempel, da es eine andere Eigenschaft namens „Timestamp“ gibt, die die letzte Aktualisierung eines Datensatzes speichert. Wenn Sie beispielsweise eine Entität laden und sie aktualisieren möchten, muss das ETag mit dem übereinstimmen, was derzeit gespeichert ist. Das Festlegen des entsprechenden ETags ist wichtig, denn wenn mehrere Benutzer dasselbe Element bearbeiten, sollen sie die Änderungen der anderen nicht überschreiben.

content_type

text der für das Blob angegebene Inhaltstyp. Der Standardinhaltstyp ist application/octet-stream.

content_encoding

text die Inhaltscodierungseigenschaft eines Blobs, mit dem Azure Storage definiert werden kann. Bei komprimierten Inhalten könnten Sie die Eigenschaft auf Gzip festlegen. Wenn der Browser auf den Inhalt zugreift, dekomprimiert er den Inhalt automatisch.

content_hash

text der Hash, der verwendet wird, um die Integrität des Blobs während des Transports zu überprüfen. Wenn dieser Header angegeben ist, überprüft der Speicherdienst den bereitgestellten Hash mit einem vom Inhalt berechneten Hash. Wenn die beiden Hashs nicht übereinstimmen, schlägt der Vorgang mit Fehlercode 400 (Ungültige Anforderung) fehl.

azure_storage.blob_get

Funktion, die das Importieren von Daten zulässt. Sie lädt eine oder mehrere Dateien aus einem BLOB-Container in ein Azure Storage-Konto herunter. Anschließend wird der Inhalt in Zeilen übersetzt, die mit SQL-Sprachkonstrukten verwendet und verarbeitet werden können. Diese Funktion bietet Unterstützung zum Filtern und Bearbeiten der daten, die aus dem Blobcontainer abgerufen wurden, bevor sie importiert werden.

Hinweis

Bevor Sie versuchen, auf den Container für das referenzierte Speicherkonto zuzugreifen, überprüft diese Funktion, ob die Namen des Speicherkontos und containers, die als Argumente übergeben werden, gemäß den Benennungsüberprüfungsregeln gültig sind, die für Azure-Speicherkonten gelten. Wenn eine der beiden ungültig ist, wird ein Fehler ausgelöst.

azure_storage.blob_get(account_name text, container_name text, path text, decoder text DEFAULT 'auto'::text, compression text DEFAULT 'auto'::text, options jsonb DEFAULT NULL::jsonb);

Es gibt eine überladene Version dieser Funktion, die einen rec Parameter akzeptiert, mit dem Sie den Ausgabeformatdatensatz bequem definieren können.

azure_storage.blob_get(account_name text, container_name text, path text, rec anyelement, decoder text DEFAULT 'auto'::text, compression text DEFAULT 'auto'::text, options jsonb DEFAULT NULL::jsonb);

Berechtigungen

Der Benutzer oder die Rolle, die diese Funktion aufruft, muss der Liste zugelassener Benutzer oder Rollen hinzugefügt account_name werden, indem azure_storage.account_user_add ausgeführt wird. Mitglieder von azure_storage_admin sind automatisch berechtigt, auf alle Azure Storage-Konten zu verweisen, deren Verweise mithilfe von azure_storage.account_add hinzugefügt wurden.

Argumente

account_name

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

container_name

text der Name eines Containers. Ein Container dient zum Organisieren einer Gruppe von Blobs (ähnlich wie ein Verzeichnis in einem Dateisystem). Ein Speicherkonto kann eine unbegrenzte Anzahl von Containern enthalten, und in einem Container kann eine unbegrenzte Anzahl von Blobs gespeichert werden. Ein Containername muss ein gültiger DNS-Name (Domain Name System) sein, da er Teil des eindeutigen URI ist, der zum Adressieren des Containers oder seiner BLOBs verwendet wird. Achten Sie beim Benennen eines Containers darauf, diese Regeln zu befolgen.

Der URI für einen Container ähnelt https://myaccount.blob.core.windows.net/mycontainer.

path

text den vollständigen Namen des Blobs.

rrec

anyelement die Definition der Datensatzausgabestruktur.

Decoder

text die Spezifikation des BLOB-Formats. Kann auf einen der folgenden Werte festgelegt werden:

Format Standard Beschreibung
auto true Leitet den Wert basierend auf der letzten Reihe von Zeichen ab, die dem Namen des Blobs zugewiesen sind. Wenn der Blobname mit .csv oder .csv.gzendet, wird davon ausgegangen csv. Wenn sie mit .tsv oder .tsv.gzendet, wird davon ausgegangen tsv. Endet mit .json, , , .xml, .xml.gz, .txtoder .txt.gz, wird davon ausgegangentext.json.gz.
csv Kommagetrennte Werteformat, das von PostgreSQL COPY verwendet wird.
tsv Tabstopptrennte Werte, das standardmäßige PostgreSQL COPY-Format.
binary Binary PostgreSQL COPY Format.
text | xml | json Eine Datei, die einen einzelnen Textwert enthält.
compression

text die Spezifikation des Komprimierungstyps. Kann auf einen der folgenden Werte festgelegt werden:

Format Standard Beschreibung
auto true Leitet den Wert basierend auf der letzten Reihe von Zeichen ab, die dem Namen des Blobs zugewiesen sind. Wenn der Blobname mit .gzendet, wird davon ausgegangen gzip. Andernfalls wird davon ausgegangen none.
gzip Erzwingt die Verwendung des Gzip-Decoders zum Dekomprimieren des Blobs.
none Erzwingt die Behandlung des Blobs als eines, das keine Dekomprimierung erfordert.

Die Erweiterung unterstützt keine anderen Komprimierungstypen.

Optionen

jsonb die Einstellungen, die die Behandlung von benutzerdefinierten Kopfzeilen, benutzerdefinierten Trennzeichen, Escapezeichen usw. definieren. options wirkt sich auf das Verhalten dieser Funktion auf eine ähnliche Weise aus wie die Optionen, die Sie an den COPY Befehl in PostgreSQL übergeben können, beeinflussen sein Verhalten.

Rückgabetyp

SETOF record SETOF anyelement

azure_storage.blob_put

Funktion, die das Exportieren von Daten ermöglicht, indem Dateien in einen BLOB-Container in ein Azure Storage-Konto hochgeladen werden. Der Inhalt der Dateien wird aus Zeilen in PostgreSQL produziert.

Hinweis

Bevor Sie versuchen, auf den Container für das referenzierte Speicherkonto zuzugreifen, überprüft diese Funktion, ob die Namen des Speicherkontos und containers, die als Argumente übergeben werden, gemäß den Benennungsüberprüfungsregeln gültig sind, die für Azure-Speicherkonten gelten. Wenn eine der beiden ungültig ist, wird ein Fehler ausgelöst.

azure_storage.blob_put(account_name text, container_name text, path text, tuple record)
RETURNS VOID;

Es gibt eine überladene Version der Funktion, die einen Parameter enthält encoder , mit dem Sie den zu verwendenden Encoder angeben können, wenn er nicht von der Erweiterung des path Parameters abgeleitet werden kann, oder wenn Sie die abgeleitete Funktion außer Kraft setzen möchten.

azure_storage.blob_put(account_name text, container_name text, path text, tuple record, encoder text)
RETURNS VOID;

Es gibt eine überladene Version der Funktion, die auch einen compression Parameter enthält, mit dem Sie die zu verwendende Komprimierung angeben können, wenn sie nicht von der Erweiterung des path Parameters abgeleitet werden kann, oder wenn Sie das abgeleitete Element überschreiben möchten.

azure_storage.blob_put(account_name text, container_name text, path text, tuple record, encoder text, compression text)
RETURNS VOID;

Es gibt eine überladene Version der Funktion, die auch einen options Parameter zum Behandeln von benutzerdefinierten Headern, benutzerdefinierten Trennzeichen, Escapezeichen usw. enthält, options funktioniert auf ähnliche Weise wie die Optionen, die an den COPY Befehl in PostgreSQL übergeben werden können.

azure_storage.blob_put(account_name text, container_name text, path text, tuple record, encoder text, compression text, options jsonb)
RETURNS VOID;

Berechtigungen

Der Benutzer oder die Rolle, die diese Funktion aufruft, muss der Liste zugelassener Benutzer oder Rollen hinzugefügt account_name werden, indem azure_storage.account_user_add ausgeführt wird. Mitglieder von azure_storage_admin sind automatisch berechtigt, auf alle Azure Storage-Konten zu verweisen, deren Verweise mithilfe von azure_storage.account_add hinzugefügt wurden.

Argumente

account_name

text der Name des Azure Blob Storage-Kontos, das alle Ihre Objekte enthält: Blobs, Dateien, Warteschlangen und Tabellen. Das Speicherkonto stellt einen eindeutigen Namespace bereit, auf den von überall aus über HTTPS zugegriffen werden kann.

container_name

text der Name eines Containers. Ein Container dient zum Organisieren einer Gruppe von Blobs (ähnlich wie ein Verzeichnis in einem Dateisystem). Ein Speicherkonto kann eine unbegrenzte Anzahl von Containern enthalten, und in einem Container kann eine unbegrenzte Anzahl von Blobs gespeichert werden. Ein Containername muss ein gültiger DNS-Name (Domain Name System) sein, da er Teil des eindeutigen URI ist, der zum Adressieren des Containers oder seiner BLOBs verwendet wird. Achten Sie beim Benennen eines Containers darauf, diese Regeln zu befolgen.

Der URI für einen Container ähnelt https://myaccount.blob.core.windows.net/mycontainer.

path

text den vollständigen Namen des Blobs.

tuple

record die Definition der Datensatzausgabestruktur.

Encoder

text die Spezifikation des BLOB-Formats. Kann auf einen der folgenden Werte festgelegt werden:

Format Standard Beschreibung
auto true Leitet den Wert basierend auf der letzten Reihe von Zeichen ab, die dem Namen des Blobs zugewiesen sind. Wenn der Blobname mit .csv oder .csv.gzendet, wird davon ausgegangen csv. Wenn sie mit .tsv oder .tsv.gzendet, wird davon ausgegangen tsv. Endet mit .json, , , .xml, .xml.gz, .txtoder .txt.gz, wird davon ausgegangentext.json.gz.
csv Kommagetrennte Werteformat, das von PostgreSQL COPY verwendet wird.
tsv Tabstopptrennte Werte, das standardmäßige PostgreSQL COPY-Format.
binary Binary PostgreSQL COPY Format.
text | xml | json Eine Datei, die einen einzelnen Textwert enthält.
compression

text die Spezifikation des Komprimierungstyps. Kann auf einen der folgenden Werte festgelegt werden:

Format Standard Beschreibung
auto true Leitet den Wert basierend auf der letzten Reihe von Zeichen ab, die dem Namen des Blobs zugewiesen sind. Wenn der Blobname mit .gzendet, wird davon ausgegangen gzip. Andernfalls wird davon ausgegangen none.
gzip Erzwingt die Verwendung des Gzip-Decoders zum Dekomprimieren des Blobs.
none Erzwingt die Behandlung des Blobs als eines, das keine Dekomprimierung erfordert.

Die Erweiterung unterstützt keine anderen Komprimierungstypen.

Optionen

jsonb die Einstellungen, die die Behandlung von benutzerdefinierten Kopfzeilen, benutzerdefinierten Trennzeichen, Escapezeichen usw. definieren. options wirkt sich auf das Verhalten dieser Funktion auf eine ähnliche Weise aus wie die Optionen, die Sie an den COPY Befehl in PostgreSQL übergeben können, beeinflussen sein Verhalten.

Rückgabetyp

VOID

azure_storage.options_csv_get

Funktion, die als Hilfsfunktion fungiert, die als Parameter aufgerufen blob_getwerden kann, und ist nützlich zum Decodieren des Inhalts einer CSV-Datei.

azure_storage.options_csv_get(delimiter text DEFAULT NULL::text, null_string text DEFAULT NULL::text, header boolean DEFAULT NULL::boolean, quote text DEFAULT NULL::text, escape text DEFAULT NULL::text, force_not_null text[] DEFAULT NULL::text[], force_null text[] DEFAULT NULL::text[], content_encoding text DEFAULT NULL::text);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

Trennzeichen

text das Zeichen, das Spalten innerhalb jeder Zeile (Zeile) der Datei trennt. Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY delimiter must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

null_string

text die Zeichenfolge, die einen Nullwert darstellt. Der Standardwert ist \N (umgekehrter Schrägstrich-N) im Textformat und eine leere Zeichenfolge ohne Anführungszeichen im CSV-Format. Möglicherweise bevorzugen Sie eine leere Zeichenfolge auch im Textformat, wenn Sie Null nicht von leeren Zeichenfolgen unterscheiden möchten.

boolean flag that indicates if the file contains a header line with the names of each column in the file. Bei der Ausgabe enthält die erste Zeile die Spaltennamen aus der Tabelle.

Quote

text das an zitierte Zeichen, das verwendet werden soll, wenn ein Datenwert in Anzeichen gesetzt wird. Standardmäßig sind dies doppelte Anführungszeichen. Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY quote must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

escape

text das Zeichen, das vor einem Datenzeichen angezeigt werden soll, das dem QUOTE-Wert entspricht. Der Standardwert ist identisch mit dem QUOTE-Wert (sodass das Anführungszeichen verdoppelt werden, wenn es in den Daten angezeigt wird). Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY escape must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

force_not_null

text[] Stimmen Sie nicht mit den Werten der angegebenen Spalten mit der NULL-Zeichenfolge überein. Im Standardfall, in dem die NULL-Zeichenfolge leer ist, bedeutet dies, dass leere Werte als Zeichenfolgen der Länge null und nicht als NULLEN gelesen werden, auch wenn sie nicht in Anführungszeichen stehen.

force_null

text[] entsprechen den Werten der angegebenen Spalten mit der NULL-Zeichenfolge, auch wenn eine Übereinstimmung gefunden wird, legen Sie den Wert auf NULL fest. Im Standardfall, in dem die NULL-Zeichenfolge leer ist, konvertiert sie eine leere Zeichenfolge in Anführungszeichen in NULL.

content_encoding

text Name der Codierung, mit der die Datei codiert ist. Wenn die Option ausgelassen wird, wird die aktuelle Clientcodierung verwendet.

Rückgabetyp

jsonb

azure_storage.options_copy

Funktion, die als Hilfsfunktion fungiert, die als Parameter aufgerufen blob_getwerden kann. Sie fungiert als Hilfsfunktion für options_csv_get, options_tsv und options_binary.

azure_storage.options_copy(delimiter text DEFAULT NULL::text, null_string text DEFAULT NULL::text, header boolean DEFAULT NULL::boolean, quote text DEFAULT NULL::text, escape text DEFAULT NULL::text, force_quote text[] DEFAULT NULL::text[], force_not_null text[] DEFAULT NULL::text[], force_null text[] DEFAULT NULL::text[], content_encoding text DEFAULT NULL::text);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

Trennzeichen

text das Zeichen, das Spalten innerhalb jeder Zeile (Zeile) der Datei trennt. Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY delimiter must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

null_string

text die Zeichenfolge, die einen Nullwert darstellt. Der Standardwert ist \N (umgekehrter Schrägstrich-N) im Textformat und eine leere Zeichenfolge ohne Anführungszeichen im CSV-Format. Möglicherweise bevorzugen Sie eine leere Zeichenfolge auch im Textformat, wenn Sie Null nicht von leeren Zeichenfolgen unterscheiden möchten.

header

boolean flag that indicates if the file contains a header line with the names of each column in the file. Bei der Ausgabe enthält die erste Zeile die Spaltennamen aus der Tabelle.

Quote

text das an zitierte Zeichen, das verwendet werden soll, wenn ein Datenwert in Anzeichen gesetzt wird. Standardmäßig sind dies doppelte Anführungszeichen. Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY quote must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

escape

text das Zeichen, das vor einem Datenzeichen angezeigt werden soll, das dem QUOTE-Wert entspricht. Der Standardwert ist identisch mit dem QUOTE-Wert (sodass das Anführungszeichen verdoppelt werden, wenn es in den Daten angezeigt wird). Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY escape must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

force_quote

text[] erzwingt die Verwendung von Quoten für alle Nicht-NULL-Werte in jeder angegebenen Spalte. Die NULL-Ausgabe wird nie in Anführungszeichen gesetzt. Wenn * angegeben ist, werden in allen Spalten Werte ohne NULL in Anführungszeichen gesetzt.

force_not_null

text[] Stimmen Sie nicht mit den Werten der angegebenen Spalten mit der NULL-Zeichenfolge überein. Im Standardfall, in dem die NULL-Zeichenfolge leer ist, bedeutet dies, dass leere Werte als Zeichenfolgen der Länge null und nicht als NULLEN gelesen werden, auch wenn sie nicht in Anführungszeichen stehen.

force_null

text[] entsprechen den Werten der angegebenen Spalten mit der NULL-Zeichenfolge, auch wenn eine Übereinstimmung gefunden wird, legen Sie den Wert auf NULL fest. Im Standardfall, in dem die NULL-Zeichenfolge leer ist, konvertiert sie eine leere Zeichenfolge in Anführungszeichen in NULL.

content_encoding

text Name der Codierung, mit der die Datei codiert ist. Wenn die Option ausgelassen wird, wird die aktuelle Clientcodierung verwendet.

Rückgabetyp

jsonb

azure_storage.options_tsv

Funktion, die als Hilfsfunktion fungiert, die als Parameter innerhalb blob_getaufgerufen werden kann und zum Decodieren des Inhalts einer TSV-Datei nützlich ist.

azure_storage.options_tsv(delimiter text DEFAULT NULL::text, null_string text DEFAULT NULL::text, content_encoding text DEFAULT NULL::text);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

Trennzeichen

text das Zeichen, das Spalten innerhalb jeder Zeile (Zeile) der Datei trennt. Es muss ein einzelnes 1-Byte-Zeichen sein. Obwohl diese Funktion Trennzeichen einer beliebigen Anzahl von Zeichen unterstützt, meldet PostgreSQL einen COPY delimiter must be a single one-byte character Fehler zurück, wenn Sie versuchen, mehr als ein einzelnes 1-Byte-Zeichen zu verwenden.

null_string

text die Zeichenfolge, die einen Nullwert darstellt. Der Standardwert ist \N (umgekehrter Schrägstrich-N) im Textformat und eine leere Zeichenfolge ohne Anführungszeichen im CSV-Format. Möglicherweise bevorzugen Sie eine leere Zeichenfolge auch im Textformat, wenn Sie Null nicht von leeren Zeichenfolgen unterscheiden möchten.

content_encoding

text Name der Codierung, mit der die Datei codiert ist. Wenn die Option ausgelassen wird, wird die aktuelle Clientcodierung verwendet.

Rückgabetyp

jsonb

azure_storage.options_binary

Funktion, die als Hilfsfunktion fungiert, die als Parameter innerhalb blob_getaufgerufen werden kann und zum Decodieren des Inhalts einer Binärdatei nützlich ist.

azure_storage.options_binary(content_encoding text DEFAULT NULL::text);

Berechtigungen

Jeder Benutzer oder jede Rolle kann diese Funktion aufrufen.

Argumente

content_encoding

text Name der Codierung, mit der die Datei codiert ist. Wenn die Option ausgelassen wird, wird die aktuelle Clientcodierung verwendet.

Rückgabetyp

jsonb

Mögliche Fehler:

FEHLER: azure_storage: Die Berechtigung reicht nicht aus, um den angeforderten Vorgang auszuführen.

Beim Ausführen einer der Funktionen, die mit Azure Storage (azure_storage.blob_listoder ) interagieren und die vom System zugewiesene verwaltete Identität nicht den entsprechenden Rollen oder Berechtigungen für die Datenebene gewährt wird (in der Regel mindestens ein Minimum von Storage Blob Data Contributor für azure_storage.blob_put und mindestens speicher-Blob-Datenleser für die anderen beiden Funktionen).azure_storage.blob_putazure_storage.blob_get

Es kann auch der Fall sein, dass Sie bereits die mindestens erforderlichen Berechtigungen erteilt haben, aber sie sind noch nicht wirksam. Es kann einige Minuten dauern, bis diese Berechtigungen weitergegeben werden.

FEHLER: azure_storage: Fehlende Speicheranmeldeinformationen

Wenn Sie eine der Funktionen ausführen, azure_storage.blob_get die mit Azure Storage (azure_storage.blob_listoder azure_storage.blob_put) interagieren, und die Anmeldeinformationen, mit denen die Erweiterung mit dem Speicherkonto authentifiziert werden soll, nicht registriert azure_storage.account_addwerden.

FEHLER: azure_storage: interner Fehler beim Herstellen einer Verbindung

Wenn die vom System zugewiesene verwaltete Identität in der Instanz von Flexible Server nicht aktiviert ist.

FEHLER: azure_storage: Ungültiges Format für Speicheranmeldeinformationen

Wenn die vom System zugewiesene verwaltete Identität auf der Instanz von Flexible Server aktiviert ist, der Server jedoch nach dem Aktivieren nicht neu gestartet wurde.

FEHLER: azure_storage: Der aktuelle Benutzer <user_or_role darf keine Speicherkonto-storage_account> <>

Wenn Sie eine der Funktionen ausführen, die mit Azure Storage (azure_storage.blob_listoder azure_storage.blob_put) mit einem Benutzer oder einer Rolle interagieren, azure_storage.blob_get der azure_storage_admin nicht Mitglied ist und keine Berechtigungen erhält, verwendenazure_storage.account_user_add, um das referenzierende Speicherkonto zu verwenden.

Beispiele

Sie müssen die folgenden Voraussetzungen erfüllen, bevor Sie die folgenden Beispiele ausführen können:

  1. Erstellen Sie ein Azure Storage-Konto. Wenn Sie noch kein Azure Storage-Konto erstellen möchten, passen Sie die Werte von <resource_group>, , <location>, <storage_account>und , und <blob_container>führen Sie den folgenden Azure CLI-Befehl aus:
    resource_group=<resource_group>
    location=<location>
    storage_account=<storage_account>
    blob_container=<blob_container>
    az group create --name $resource_group --location $location
    az storage account create --resource-group $resource_group --name $storage_account --location $location --sku Standard_LRS --kind BlobStorage --public-network-access enabled --access-tier hot
    
  2. Erstellen Sie einen Blobcontainer. Führen Sie zum Erstellen des BLOB-Containers die folgende Azure CLI aus:
    az storage container create --account-name $storage_account --name $blob_container -o tsv
    
  3. Rufen Sie eine der beiden Zugriffstasten ab, die dem Speicherkonto zugewiesen sind. Stellen Sie sicher, dass Sie den Wert Ihrer access_key kopieren, da Sie ihn als Argument an azure_storage.account_add in einem nachfolgenden Schritt übergeben müssen. Führen Sie zum Abrufen der ersten der beiden Zugriffstasten den folgenden Azure CLI-Befehl aus:
    access_key=$(az storage account keys list --resource-group $resource_group --account-name $storage_account --query [0].value)
    echo "Following is the value of your access key:"
    echo $access_key
    
  4. Laden Sie die Datei mit dem Datensatz herunter, der während der Beispiele verwendet wird, und laden Sie sie in Ihren BLOB-Container hoch. Führen Sie den folgenden Azure CLI-Befehl aus, um die Datei mit dem Dataset herunterzuladen:
    mkdir --parents azure_storage_examples
    cd azure_storage_examples
    curl -O https://examples.citusdata.com/tutorial/events.csv
    gzip -k events.csv
    cp events.csv events_blob_without_extension
    cp events.csv events_pipe.csv
    cp events.csv.gz events_compressed
    sed -i 's/,/|/g' events_pipe.csv
    az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "events*" --account-key $access_key --overwrite --output none --only-show-errors
    

Hinweis

Sie können Container oder die darin gespeicherten Blobs für ein bestimmtes Speicherkonto auflisten, aber nur, wenn Ihrem PostgreSQL-Benutzer oder Ihrer Rolle die Berechtigung für den Verweis auf dieses Speicherkonto erteilt wird, indem Sie azure_storage.account_user_add verwenden. Mitgliedern der azure_storage_admin Rolle wird diese Berechtigung für alle Azure Storage-Konten gewährt, die mit azure_storage.account_add hinzugefügt wurden. Standardmäßig werden nur Mitglieder der azure_pg_admin azure_storage_admin Rolle gewährt.

Tabelle erstellen, in der Daten geladen werden

Erstellen wir die Tabelle, in die wir den Inhalt der CSV-Datei importieren, die wir in das Speicherkonto hochgeladen haben. Stellen Sie dazu eine Verbindung mit Ihrer Instanz von Azure Database for PostgreSQL flexiblen Server her, indem PgAdminSie , psqloder den Client Ihrer Vorliebe verwenden, und führen Sie die folgende Anweisung aus:

CREATE TABLE IF NOT EXISTS events
        (
         event_id bigint
        ,event_type text
        ,event_public boolean
        ,repo_id bigint
        ,payload jsonb
        ,repo jsonb
        ,user_id bigint
        ,org jsonb
        ,created_at timestamp without time zone
        );

Hinzufügen des Zugriffsschlüssels des Speicherkontos

In diesem Beispiel wird veranschaulicht, wie Sie einem Speicherkonto einen Verweis hinzufügen, zusammen mit dem Zugriffsschlüssel dieses Speicherkontos, das für den Zugriff auf seine Inhalte über die durch die azure_storage Erweiterung in Ihrer Instanz von Azure Database für PostgreSQL flexible Server bereitgestellte Funktionalität erforderlich ist.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

Ebenso muss auf den Wert festgelegt werden, <access_key> den Sie aus Ihrem Speicherkonto abgerufen haben.

SELECT azure_storage.account_add('<storage_account>', '<access_key>');

Tipp

Wenn Sie den Namen des Speicherkontos und eine seiner Zugriffstasten aus dem Azure-Portal abrufen möchten, suchen Sie im Ressourcenmenü Zugriffstasten, kopieren Sie den Namen des Speicherkontos, und kopieren Sie den Schlüssel aus dem Abschnitt "key1" (Sie müssen zuerst neben dem Schlüssel anzeigen) auswählen.

Entfernen des Verweises auf das Speicherkonto

In diesem Beispiel wird veranschaulicht, wie Sie einen Verweis auf ein Speicherkonto entfernen, damit kein Benutzer in der aktuellen Datenbank die azure_storage Erweiterungsfunktionalität verwenden kann, um auf dieses Speicherkonto zuzugreifen.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

SELECT azure_storage.account_remove('<storage_account>');

Gewähren des Zugriffs auf einen Benutzer oder eine Rolle in der Azure Blob Storage-Referenz

In diesem Beispiel wird veranschaulicht, wie Der Zugriff auf einen Benutzer oder eine Rolle mit dem Namen <regular_user>gewährt wird, damit ein solcher PostgreSQL-Benutzer die azure_storage Erweiterung verwenden kann, um auf die blobs zuzugreifen, die in Containern gespeichert sind, die vom genannten Azure-Speicherkonto gehostet werden.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<regular_user> muss auf den Namen eines vorhandenen Benutzers oder einer vorhandenen Rolle festgelegt werden.

SELECT * FROM azure_storage.account_user_add('<storage_account>', '<regular_user>');

Auflisten aller Verweise auf Azure-Speicherkonten

In diesem Beispiel wird veranschaulicht, wie Sie herausfinden können, auf welche Azure-Speicherkonten die azure_storage Erweiterung in dieser Datenbank verweisen kann, zusammen mit dem Authentifizierungstyp, der für den Zugriff auf jedes Speicherkonto verwendet wird, und welchen Benutzern oder Rollen über die Funktion azure_storage.account_user_add berechtigungen erteilt werden, um über die von der Erweiterung bereitgestellte Funktionalität auf dieses Azure-Speicherkonto zuzugreifen.

SELECT * FROM azure_storage.account_list();

Widerrufen des Zugriffs von einem Benutzer oder einer Rolle in der Azure Blob Storage-Referenz

In diesem Beispiel wird veranschaulicht, wie Der Zugriff von einem Benutzer oder einer Rolle mit dem Namen <regular_user>widerrufen wird, sodass ein solcher PostgreSQL-Benutzer die azure_storage Erweiterung nicht für den Zugriff auf die blobs verwenden kann, die in Containern gespeichert sind, die vom bezeichneten Azure-Speicherkonto gehostet werden.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<regular_user> muss auf den Namen eines vorhandenen Benutzers oder einer vorhandenen Rolle festgelegt werden.

SELECT * FROM azure_storage.account_user_remove('<storage_account>', '<regular_user>');

Auflisten aller Blobs in einem Container

In diesem Beispiel wird veranschaulicht, wie alle vorhandenen Blobs im Container <container_name> des Speicherkontos <storage_account>aufgeführt werden.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT * FROM azure_storage.blob_list('<storage_account>','<blob_container>');

Auflisten der Objekte mit einem bestimmten Blobnamenpräfix

In diesem Beispiel wird veranschaulicht, wie alle vorhandenen Blobs im Container <blob_container> des Speicherkontos <storage_account>aufgeführt werden, deren Blobname mit <blob_name_prefix>.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

<blob_name_prefix> sollte auf das Präfix festgelegt werden, das die Blobs in ihre Namen aufnehmen sollen. Wenn Sie alle Blobs zurückgeben möchten, können Sie diesen Parameter auf eine leere Zeichenfolge festlegen oder keinen Wert für diesen Parameter angeben. In diesem Fall wird der Wert standardmäßig auf eine leere Zeichenfolge festgelegt.

SELECT * FROM azure_storage.blob_list('<storage_account>','<blob_container>','<blob_name_prefix>');

Alternativ können Sie die folgende Syntax verwenden:

SELECT * FROM azure_storage.blob_list('<storage_account>','<blob_container>') WHERE path LIKE '<blob_name_prefix>%';

Lesen von Inhalten aus einem BLOB in einem Container

Die blob_get Funktion ruft den Inhalt eines bestimmten Blobs (events.csv in diesem Fall) im referenzierbaren Container <blob_container> des <storage_account> Speichers ab. Um blob_get zu wissen, wie Sie die Daten analysieren, können Sie einen Wert im Formular NULL::table_nameübergeben, wobei table_name sich auf eine Tabelle bezieht, deren Schema mit dem des gelesenen Blobs übereinstimmt. Im Beispiel bezieht es sich auf die Tabelle, die events wir am Anfang erstellt haben.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

<blob_name_prefix> sollte auf das Präfix festgelegt werden, das die Blobs in ihre Namen aufnehmen sollen. Wenn Sie alle Blobs zurückgeben möchten, können Sie diesen Parameter auf eine leere Zeichenfolge festlegen oder keinen Wert für diesen Parameter angeben. In diesem Fall wird der Wert standardmäßig auf eine leere Zeichenfolge festgelegt.

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events.csv'
        , NULL::events)
LIMIT 5;

Alternativ können Sie das Schema des Ergebnisses explizit mithilfe der AS Klausel nach der blob_get-Funktion definieren.

SELECT * FROM azure_storage.blob_get('<storage_account>','<blob_container>','events.csv.gz')
AS res (
         event_id BIGINT
        ,event_type TEXT
        ,event_public BOOLEAN
        ,repo_id BIGINT
        ,payload JSONB
        ,repo JSONB
        ,user_id BIGINT
        ,org JSONB
        ,created_at TIMESTAMP WITHOUT TIME ZONE)
LIMIT 5;

Verwenden der Decoderoption

In diesem Beispiel wird die Verwendung der decoder Option veranschaulicht. Normalerweise wird das Format aus der Erweiterung der Datei abgeleitet, aber wenn die Dateiinhalte keine übereinstimmende Erweiterung aufweisen, können Sie das Decoderargument übergeben.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events_blob_without_extension'
        , NULL::events
        , decoder := 'csv')
LIMIT 5;

Verwenden der Komprimierung mit Decoderoption

In diesem Beispiel wird gezeigt, wie Sie die Verwendung der Gzip-Komprimierung für ein Gzip-komprimiertes Blob erzwingen, dessen Name nicht mit einer .gz Erweiterung endet.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events_compressed'
        , NULL::events
        , decoder := 'csv'
        , compression := 'gzip')
LIMIT 5;

Importieren gefilterter Inhalte und Ändern vor dem Laden aus dem CSV-Formatobjekt

In diesem Beispiel wird die Möglichkeit veranschaulicht, den aus dem Blob importierten Inhalt zu filtern und zu ändern, bevor er in eine SQL-Tabelle geladen wird.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT concat('P-',event_id::text) FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events.csv'
        , NULL::events)
WHERE event_type='PushEvent'
LIMIT 5;

Abfragen von Inhalten aus einer Datei mit Kopfzeilen, benutzerdefinierten Trennzeichen, Escapezeichen

In diesem Beispiel wird veranschaulicht, wie Sie benutzerdefinierte Trennzeichen und Escapezeichen verwenden können, indem Sie das Ergebnis options_copy an das options Argument übergeben.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT * FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events_pipe.csv'
        ,NULL::events
        ,options := azure_storage.options_csv_get(delimiter := '|' , header := 'true')
        );

Aggregationsabfrage über den Inhalt eines Blobs

In diesem Beispiel wird veranschaulicht, wie Sie Aggregationsvorgänge über Informationen ausführen können, die in einem BLOB-Container gespeichert sind, ohne dass der Inhalt des Blobs in PostgreSQL-Tabellen importiert werden muss.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT event_type, COUNT(*) FROM azure_storage.blob_get
        ('<storage_account>'
        ,'<blob_container>'
        ,'events.csv'
        , NULL::events)
GROUP BY event_type
ORDER BY 2 DESC
LIMIT 5;

Importieren von Daten mithilfe einer COPY-Anweisung

Das folgende Beispiel zeigt den Import von Daten aus einem Blob, der sich events.csv im BLOB-Container <blob_container> im Azure Storage-Konto <storage_account>befindet, über den COPY Befehl:

  1. Erstellen Sie eine Tabelle, die dem Schema der Quelldatei entspricht:

    CREATE TABLE IF NOT EXISTS events
            (
             event_id bigint
            ,event_type text
            ,event_public boolean
            ,repo_id bigint
            ,payload jsonb
            ,repo jsonb
            ,user_id bigint
            ,org jsonb
            ,created_at timestamp without time zone
            );
    
  2. Verwenden Sie eine COPY-Anweisung, um Daten in die Zieltabelle zu kopieren. Geben Sie an, dass die erste Zeile Spaltenüberschriften enthält.

    COPY events
    FROM 'https://<storage_account>.blob.core.windows.net/<blob_container>/events.csv'
    WITH (FORMAT 'csv', header);
    

Schreiben von Inhalten in ein Blob in einem Container

Die blob_put Funktion verfasst den Inhalt eines bestimmten Blobs (eventscopy.csv in diesem Fall), und lädt ihn in den referenzierbaren Container <blob_container> des <storage_account> Speichers hoch. In diesem Beispiel wird blob_get eine Gruppe von fünf Zeilen erstellt, die dann an die blob_put Aggregatfunktion übergeben werden, die sie als BLOB eventscopy.csvhochlädt.

<storage_account> muss auf den Namen Ihres Speicherkontos festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die Umgebungsvariable storage_account in diesen Skripts festlegen.

<blob_container> muss auf den Namen Ihres BLOB-Containers festgelegt werden. Wenn Sie die vorherigen Skripts verwendet haben, sollte dieser Wert mit dem Wert übereinstimmen, den Sie auf die umgebungsvariable blob_container in diesen Skripts festlegen.

SELECT azure_storage.blob_put
        ('<storage_account>'
        ,'<blob_container>'
        ,'eventscopy.csv'
        , top_5_events)
FROM (SELECT * FROM azure_storage.blob_get
                     ('<storage_account>'
                     ,'<blob_container>'
                     ,'events.csv'
                     , NULL::events) LIMIT 5) AS top_5_events;

Exportieren von Daten mithilfe einer COPY-Anweisung

Das folgende Beispiel zeigt den Export von Daten aus einer Tabelle namens events"in ein Blob events_exported.csv ", das sich im Blobcontainer <blob_container> im Azure Storage-Konto <storage_account>befindet, über den COPY Befehl:

  1. Erstellen Sie eine Tabelle, die dem Schema der Quelldatei entspricht:

    CREATE TABLE IF NOT EXISTS events
            (
             event_id bigint
            ,event_type text
            ,event_public boolean
            ,repo_id bigint
            ,payload jsonb
            ,repo jsonb
            ,user_id bigint
            ,org jsonb
            ,created_at timestamp without time zone
            );
    
  2. Laden Sie Daten in die Tabelle. Führen Sie entweder INSERT-Anweisungen aus, um sie mit mehreren synthetischen Zeilen zu füllen, oder verwenden Sie die Importdaten mithilfe eines COPY-Anweisungsbeispiels , um sie mit dem Inhalt des Beispieldatensatzes aufzufüllen.

  3. Verwenden Sie eine COPY-Anweisung, um Daten in die Zieltabelle zu kopieren. Geben Sie an, dass die erste Zeile Spaltenüberschriften enthält.

    COPY events
    TO 'https://<storage_account>.blob.core.windows.net/<blob_container>/events_exported.csv'
    WITH (FORMAT 'csv', header);
    

Teilen Sie Ihre Vorschläge und Fehler mit dem Azure Database for PostgreSQL-Produktteam.