Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Note
Firehose prend en charge la base de données en tant que source dans toutes les régions sauf en Régions AWSChine et en Asie-Pacifique (Malaisie). AWS GovCloud (US) Regions Cette fonctionnalité est en version préliminaire et est sujette à modification. Ne l'utilisez pas pour vos charges de travail de production.
Créez la procédure SQL suivante dans votre base de données pour créer une table de filigranes, un rôle pour l'accès Firehose à la base de données, fournir les autorisations requises pour le rôle Firehose et créer le rôle de propriétaire du groupe et le rôle Firehose pour le groupe. Vous pouvez utiliser cette procédure pour les bases de données PostgreSQL exécutées sur. EC2
Note
Certaines anciennes versions de base de données peuvent ne pas prendre IF NOT
EXISTS
en charge la chaîne de la ligne CREATE PROCEDURE. Dans ce cas, IF NOT EXISTS
supprimez-le de la PROCÉDURE CREATE et utilisez le reste de la procédure.
CREATE OR REPLACE PROCEDURE setupFirehose(
p_schema_name TEXT,
p_database_name TEXT,
p_watermark_name TEXT,
p_role_name TEXT,
p_role_password TEXT,
p_group_owner_name TEXT
)
LANGUAGE plpgsql
AS $$
BEGIN
-- Use logical decoding
EXECUTE 'ALTER SYSTEM SET wal_level = logical';
-- Create watermark table
EXECUTE 'CREATE TABLE IF NOT EXISTS ' || quote_ident(p_database_name) || '.' || quote_ident(p_schema_name) || '.' || quote_ident(p_watermark_name) || '(id varchar(64) PRIMARY KEY, type varchar(32), data varchar(2048))';
RAISE NOTICE 'Created watermark table: %', p_watermark_name;
-- Create the role with the given password
IF EXISTS (
SELECT FROM pg_catalog.pg_roles
WHERE rolname = p_role_name)
THEN
RAISE NOTICE 'Role % already exists. Skipping creation', p_role_name;
ELSE
EXECUTE 'CREATE ROLE ' || p_role_name || ' WITH LOGIN INHERIT REPLICATION PASSWORD ' || quote_literal(p_role_password);
RAISE NOTICE 'Created role: %', p_role_name;
END IF;
-- Grant required privileges to the role
EXECUTE 'GRANT CREATE ON SCHEMA ' || quote_ident(p_schema_name) || ' TO ' || quote_ident(p_role_name);
EXECUTE 'GRANT CREATE ON DATABASE ' || quote_ident(p_database_name) || ' TO ' || quote_ident(p_role_name);
EXECUTE 'ALTER TABLE ' || quote_ident(p_schema_name) || '.' || quote_ident(p_watermark_name) || ' OWNER TO ' || quote_ident(p_role_name);
-- Create shared ownership role
IF EXISTS (
SELECT FROM pg_catalog.pg_roles
WHERE rolname = p_group_owner_name)
THEN
RAISE NOTICE 'Role % already exists. Skipping creation', p_group_owner_name;
ELSE
EXECUTE 'CREATE ROLE ' || quote_ident(p_group_owner_name);
RAISE NOTICE 'Created role: %', p_group_owner_name;
END IF;
EXECUTE 'GRANT ' || quote_ident(p_group_owner_name) || ' TO ' || quote_ident(p_role_name);
END;
$$;
Utilisation
Appelez cette procédure à l'aide d'un client SQL.
CALL setupFirehose(
'public'
,'test_db'
,'watermark'
,'new_role'
,'Test123'
,'group_role'
);