9
superuserロールを持たないアカウントを使用する
3. 次のコマンドを実行して、関数attrep_intercept_ddlを作成します。:
CREATE ORREPLACE FUNCTION <オブジェクトを作成するスキーマ名>.attrep_intercept_ddl()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
declare _qry text;
BEGIN
if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE') then
SELECT current_query() into _qry;
insert into <オブジェクトを作成するスキーマ名>.attrep_ddl_audit
values
(
default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
);
delete from <オブジェクトを作成するスキーマ名>.attrep_ddl_audit;
end if;
END;
$$;
20
ユーザーの作成と必要なアクセス許可
以下の権限をQlik Replicateで使用するユーザーに与えます。
• FullLoad レプリケーション: ソースデータベースに対する SELECT 権限
• Apply Changes レプリケーション: Superuser 権限
※ Superuserロールを使用しない場合は、「superuserロールを持たないアカウントを使用する」を参照して設定してください。
psql -U postgres –d <使用するデータベース名>
# プロンプトでパスワードを求められるので、入力してログインします。
CREATE USER replicate_user WITH PASSWORD 'replicate_password' SUPERUSER;
GRANT USAGE ON SCHEMA <使用するスキーマ名> TO replicate_user;
GRANT SELECT ON ALL TABLES IN SCHEMA <使用するスキーマ名> TO replicate_user;
以下がユーザー作成と権限付与の例です。
42
制限事項
• データベース名にセミコロン(;)を含むことはできません。
• ソーステーブルとそれに対応するターゲットテーブルの両方に、同一の主キーがなければなりません。どちらかのテーブルに主キーがない場合、DELETE
やUPDATEのレコード操作の結果は予測できないものになります。
•“Start Process Changes from Timestamp” のRunオプションはサポートされません。
• Before Imageのレプリケーションはサポートされません。
• 同じ名前でケースが異なる複数のテーブル(例:table1、TABLE1、Table1)を複製すると、予測不可能な動作を引き起こす可能性があるため、
サポートされていません。
• CREATE|ALTER|DROP]テーブルDDLの変更処理は、内部の関数/プロシージャのボディブロックやその他の入れ子構造に保持されていない限
りサポートされます。 例えば、次のような変更は捕捉されません。 :
CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT
NULL);
END;
$$;
54
rds_superuserロールを持たないアカウントを使用する
3. 次のコマンドを実行して、関数attrep_intercept_ddlを作成します。:
CREATE ORREPLACE FUNCTION <オブジェクトを作成するスキーマ名>.attrep_intercept_ddl()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
declare _qry text;
BEGIN
if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE') then
SELECT current_query() into _qry;
insert into <オブジェクトを作成するスキーマ名>.attrep_ddl_audit
values
(
default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
);
delete from <オブジェクトを作成するスキーマ名>.attrep_ddl_audit;
end if;
END;
$$;
56
制限事項
• データベース名にセミコロン(;)を含むことはできません。
• ”RDS”はAWSの予約語のため、”rds”から始まるタスク名は設定してはいけません。
•ソーステーブルとそれに対応するターゲットテーブルの両方に、同一の主キーがなければなりません。どちらかのテーブルに主キーがない場合、DELETE
やUPDATEのレコード操作の結果は予測できないものになります。
• “Start Process Changes from Timestamp” のRunオプションはサポートされません。
• Before Imageのレプリケーションはサポートされません。
• 同じ名前でケースが異なる複数のテーブル(例:table1、TABLE1、Table1)を複製すると、予測不可能な動作を引き起こす可能性があるため、
サポートされていません。
• CREATE|ALTER|DROP]テーブルDDLの変更処理は、内部の関数/プロシージャのボディブロックやその他の入れ子構造に保持されていない限
りサポートされます。 例えば、次のような変更は捕捉されません。 :
CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT
NULL);
END;
$$;
77
ターゲットデータ型
Qlik Replicate データ型PostgreSQL データ型
BOOL BOOL
BYTES BYTEA
DATE DATE
TIME TIME
DATETIME If scale is => 0 and =< 6, then:
TIMESTAMP
If scale is => 7 and =< 12, then:
VARCHAR (37)
INT1 SMALLINT
INT2 SMALLINT
INT4 INTEGER
INT8 BIGINT
NUMERIC DECIMAL (P, S)
REAL4 FLOAT4
REAL8 FLOAT8
STRING If length is 1 - 21845, then:
VARCHAR (Length in Bytes = The STRING value multiplied by three)
If length is 21846 - 2147483647, then:
VARCHAR (65535)
UINT1 SMALLINT
UINT2 INTEGER
UINT4 BIGINT
UINT8 BIGINT
Qlik Replicate データ型 PostgreSQL データ型
WSTRING If length is 1 - 21845, then:
VARCHAR (Length in Bytes = The WSTRING value multiplied by three)
If length is 21846 - 2147483647, then:
VARCHAR (65535)
BLOB BYTEA
NCLOB TEXT
CLOB TEXT