PostgreSQL逻辑复制在回填列默认值时复制临时表

时间:2019-06-06 01:51:52

标签: postgresql logical-replication

因此,我正在尝试在PostgreSQL 10.7中使用逻辑复制,并使用AWS Kinesis通过我们的系统(source)复制数据。虽然效果很好,但我注意到的是以下情况:

CREATE TABLE foo (id SERIAL PRIMARY KEY, value TEXT);

INSERT INTO foo (value) VALUES ('test');
INSERT INTO foo (value) VALUES ('test2');
INSERT INTO foo (value) VALUES ('test3');
INSERT INTO foo (value) VALUES ('test4');

按预期发射(使用wal2json):

{
    "change": [
        {
            "kind": "insert",
            "schema": "public",
            "table": "foo",
            "columnnames": ["id", "value"],
            "columntypes": ["integer", "text"],
            "columnvalues": [1, "test"]
        }
    ]
}
...

但是,如果我随后ALTER在表中使用默认值创建新列:

ALTER TABLE foo ADD COLUMN bar TEXT DEFAULT 'bar';

生成的WAL与临时表相关联,大概是因为必须重写整个表。

{
    "change": [
        {
            "kind": "insert",
            "schema": "public",
            "table": "pg_temp_16408",
            "columnnames": ["id", "value", "bar"],
            "columntypes": ["integer", "text", "text"],
            "columnvalues": [1, "test", "bar"]
        }
        ,{
            "kind": "insert",
            "schema": "public",
            "table": "pg_temp_16408",
            "columnnames": ["id", "value", "bar"],
            "columntypes": ["integer", "text", "text"],
            "columnvalues": [2, "test", "bar"]
        }
    ...

所以我的问题是,当我在下游使用此更改时,有什么办法让我知道与这些更改相关的表?

0 个答案:

没有答案