Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ooV4e-0005qE-6o for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Oct 2022 19:31:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ooV4b-00011d-8j for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Oct 2022 19:31:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ooV4a-00011U-Rk for pgsql-hackers@lists.postgresql.org; Fri, 28 Oct 2022 19:31:20 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ooV4S-0000dm-V7 for pgsql-hackers@lists.postgresql.org; Fri, 28 Oct 2022 19:31:20 +0000 Received: by mail-lj1-x22e.google.com with SMTP id u2so9603149ljl.3 for ; Fri, 28 Oct 2022 12:31:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:user-agent:date:to:from:subject:message-id:from:to:cc :subject:date:message-id:reply-to; bh=dJVl4jEwGpyzuCUo52CpImI/DXFGe16OkNbDnjl3dsw=; b=hrVYKx/xH9aM0cmk6gGQJi/RhHmk0yXgl5uVOyDkoPfrLbzGrsiGeyGT5GjlX0JkQv pVhtFi3AKQuZ6hAzh65ZvEvfWuABdUq52H6PgWLSkYwQO7Ml0FGW2ueQQazEJ98VcwCB lhFO8E+GjhQGJM+jKqaO649j6JD0M4E0yozXs3kRaDiFkGub0c9TGLtg/D5OwsmLS39q vZPPM+gW+U85uq4GTBzwqyjiExSG0Eu2JCcEXsnvtfEmvx2oaluFEMHqglmjwJDIUuJa J9uFzIrPfnP2wurvwgwsCkz8/kOyUX5OybBIblayn3Rc2Dr1LwlrSAWWckQuBw7iIwVA ViUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:date:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dJVl4jEwGpyzuCUo52CpImI/DXFGe16OkNbDnjl3dsw=; b=i1Rv5FPZLQ5hhbFnIDezwgfFM1INIKKgTwPYqNPfjH2AqpOoGqtQOGroq/IHz9A6hD MHtSFC1FRsbyrxbwI1nAqFFHI6WAcy/7RuVP2vPF6j7qFjDISbbSPh7Bn7wPwssGKxxc J459Q+alrANVgJJmoNBBOxr8Uma7y6iZywd2NFZaXa+TSrJYA93izO60lcvN7RHyOPC/ P3aCcqqF9VLMYM0A/C/AAZqzTV0SbIosPHdKGUVwmfYvmseiDkUYG++OCWe64BQbIiif y4rz2eZN9JYmwbF8QM1Lr6Opx/VpPG/66u3ABNXS6HxZh1kje56uJTxDJV1ut80LD2gb 9QHw== X-Gm-Message-State: ACrzQf2ul8T+ODFSRsU3LMrgCdwAfIZZt4W2hb104Q83UxBM29nbqFVX D6J2pUqQkQ40YjW3zp9v+aMRtnpkQbCKPQ== X-Google-Smtp-Source: AMsMyM5KXImma4VLoVIihvrSnmT7U6Vbygl0ljbU+UA7ikL4yMfU+VNZI9lz6E6T0C4optTU2AufEg== X-Received: by 2002:a2e:a910:0:b0:261:b408:1169 with SMTP id j16-20020a2ea910000000b00261b4081169mr437916ljq.360.1666985470985; Fri, 28 Oct 2022 12:31:10 -0700 (PDT) Received: from [192.168.0.207] ([176.193.22.147]) by smtp.gmail.com with ESMTPSA id u8-20020ac243c8000000b004ac393ecc34sm672202lfl.302.2022.10.28.12.31.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Oct 2022 12:31:10 -0700 (PDT) Message-ID: <6b93e3748ba43298694f376ca8797279d7945e29.camel@gmail.com> Subject: Segfault on logical replication to partitioned table with foreign children From: ilya.v.gladyshev@gmail.com To: pgsql-hackers@lists.postgresql.org Date: Fri, 28 Oct 2022 23:31:09 +0400 Content-Type: multipart/mixed; boundary="=-izp5UkSjZfF797lEfsW6" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-izp5UkSjZfF797lEfsW6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Hi, Right now it is possible to add a partitioned table with foreign tables as its children as a target of a subscription. It can lead to an assert (or a segfault, if compiled without asserts) on a logical replication worker when the worker attempts to insert the data received via replication into the foreign table. Reproduce with caution, the worker is going to crash and restart indefinitely. The setup: Publisher on 5432 port: CREATE TABLE parent (id int, num int); CREATE PUBLICATION parent_pub FOR TABLE parent; Subscriber on 5433 port: CREATE EXTENSION postgres_fdw; CREATE SERVER loopback foreign data wrapper postgres_fdw options (host '127.0.0.1', port '5433', dbname 'postgres'); CREATE USER MAPPING FOR CURRENT_USER SERVER loopback; CREATE TABLE parent (id int, num int) partition by range (id); CREATE FOREIGN TABLE p1 PARTITION OF parent DEFAULT SERVER loopback; CREATE TABLE p1_loc(id int, num int); CREATE SUBSCRIPTION parent_sub CONNECTION 'host=127.0.0.1 port=5432 dbname=postgres' PUBLICATION parent_pub; Then run an insert on the publisher: INSERT INTO parent VALUES (1, 1); This will cause a segfault or raise an assert, because inserting into foreign tables via logical replication is not possible. The solution I propose is to add recursive checks of relkind for children of a target, if the target is a partitioned table. I have attached a patch for this and managed to reproduce this on REL_14_STABLE as well, not sure if a patch for that version is also needed. Kind Regards, Ilya Gladyshev --=-izp5UkSjZfF797lEfsW6 Content-Disposition: attachment; filename="0001-check-relkind-of-subscription-target-recursively.patch" Content-Type: text/x-patch; name="0001-check-relkind-of-subscription-target-recursively.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5NmYxZmNlOGZiNTBmNTI3Yjk1OGRlMTNhNjBmNzMyNGRkMWVmMDUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbHlhIEdsYWR5c2hldiA8aWx5YS52LmdsYWR5c2hldkBnbWFp bC5jb20+CkRhdGU6IEZyaSwgMjggT2N0IDIwMjIgMjM6MjU6MjAgKzA0MDAKU3ViamVjdDogW1BB VENIXSBjaGVjayByZWxraW5kIG9mIHN1YnNjcmlwdGlvbiB0YXJnZXQgcmVjdXJzaXZlbHkKCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgIHwgMTMgKysrKy0t LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgIHwgNDUgKysrKysr KysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlv bi5jIHwgIDcgKystLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICAg IHwgIDQgKy0KIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IGYwY2VjMmFk NWUuLmUyZGQ2NDI1ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlw dGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMK QEAgLTcwMyw5ICs3MDMsMTAgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAogCQkJCXJlbGlkID0gUmFuZ2VWYXJH ZXRSZWxpZChydiwgQWNjZXNzU2hhcmVMb2NrLCBmYWxzZSk7CiAKLQkJCQkvKiBDaGVjayBmb3Ig c3VwcG9ydGVkIHJlbGtpbmQuICovCi0JCQkJQ2hlY2tTdWJzY3JpcHRpb25SZWxraW5kKGdldF9y ZWxfcmVsa2luZChyZWxpZCksCi0JCQkJCQkJCQkJIHJ2LT5zY2hlbWFuYW1lLCBydi0+cmVsbmFt ZSk7CisJCQkJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCByZWxraW5kIHJlY3Vyc2l2ZWx5LiAqLwor CQkJCUNoZWNrU3Vic2NyaXB0aW9uUmVsYXRpb24ocmVsaWQsCisJCQkJCQkJCQkJICBnZXRfcmVs X3JlbGtpbmQocmVsaWQpLAorCQkJCQkJCQkJCSAgcnYtPnNjaGVtYW5hbWUsIHJ2LT5yZWxuYW1l KTsKIAogCQkJCUFkZFN1YnNjcmlwdGlvblJlbFN0YXRlKHN1YmlkLCByZWxpZCwgdGFibGVfc3Rh dGUsCiAJCQkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIpOwpAQCAtODY0LDkgKzg2NSw5IEBAIEFs dGVyU3Vic2NyaXB0aW9uX3JlZnJlc2goU3Vic2NyaXB0aW9uICpzdWIsIGJvb2wgY29weV9kYXRh LAogCiAJCQlyZWxpZCA9IFJhbmdlVmFyR2V0UmVsaWQocnYsIEFjY2Vzc1NoYXJlTG9jaywgZmFs c2UpOwogCi0JCQkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIHJlbGtpbmQuICovCi0JCQlDaGVja1N1 YnNjcmlwdGlvblJlbGtpbmQoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSwKLQkJCQkJCQkJCSBydi0+ c2NoZW1hbmFtZSwgcnYtPnJlbG5hbWUpOworCQkJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCByZWxr aW5kIHJlY3Vyc2l2ZWx5LiAqLworCQkJQ2hlY2tTdWJzY3JpcHRpb25SZWxhdGlvbihyZWxpZCwg Z2V0X3JlbF9yZWxraW5kKHJlbGlkKSwKKwkJCQkJCQkJCSAgcnYtPnNjaGVtYW5hbWUsIHJ2LT5y ZWxuYW1lKTsKIAogCQkJcHVicmVsX2xvY2FsX29pZHNbb2ZmKytdID0gcmVsaWQ7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggNjAxNGYyZTI0OC4uOThiYzRhNjYx OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTE2LDkgKzE2LDEx IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFt LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90 cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuaCIKQEAgLTY0NSwxMyArNjQ3LDcgQEAgQ2hlY2tDbWRSZXBs aWNhSWRlbnRpdHkoUmVsYXRpb24gcmVsLCBDbWRUeXBlIGNtZCkKIAkJCQkgZXJyaGludCgiVG8g ZW5hYmxlIGRlbGV0aW5nIGZyb20gdGhlIHRhYmxlLCBzZXQgUkVQTElDQSBJREVOVElUWSB1c2lu ZyBBTFRFUiBUQUJMRS4iKSkpOwogfQogCi0KLS8qCi0gKiBDaGVjayBpZiB3ZSBzdXBwb3J0IHdy aXRpbmcgaW50byBzcGVjaWZpYyByZWxraW5kLgotICoKLSAqIFRoZSBuc3BuYW1lIGFuZCByZWxu YW1lIGFyZSBvbmx5IG5lZWRlZCBmb3IgZXJyb3IgcmVwb3J0aW5nLgotICovCi12b2lkCitzdGF0 aWMgdm9pZAogQ2hlY2tTdWJzY3JpcHRpb25SZWxraW5kKGNoYXIgcmVsa2luZCwgY29uc3QgY2hh ciAqbnNwbmFtZSwKIAkJCQkJCSBjb25zdCBjaGFyICpyZWxuYW1lKQogewpAQCAtNjYyLDMgKzY1 OCwzOCBAQCBDaGVja1N1YnNjcmlwdGlvblJlbGtpbmQoY2hhciByZWxraW5kLCBjb25zdCBjaGFy ICpuc3BuYW1lLAogCQkJCQkJbnNwbmFtZSwgcmVsbmFtZSksCiAJCQkJIGVycmRldGFpbF9yZWxr aW5kX25vdF9zdXBwb3J0ZWQocmVsa2luZCkpKTsKIH0KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IGNo ZWNrIGlmIHdlIHN1cHBvcnQgd3JpdGluZyBpbnRvIHNwZWNpZmljIHJlbGtpbmQuCisgKgorICog VGhlIG5zcG5hbWUgYW5kIHJlbG5hbWUgYXJlIG9ubHkgbmVlZGVkIGZvciBlcnJvciByZXBvcnRp bmcuCisgKi8KK3ZvaWQKK0NoZWNrU3Vic2NyaXB0aW9uUmVsYXRpb24oT2lkIHJlbGlkLCBjaGFy IHJlbGtpbmQsIGNvbnN0IGNoYXIgKm5zcG5hbWUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnJlbG5h bWUpCit7CisJQ2hlY2tTdWJzY3JpcHRpb25SZWxraW5kKHJlbGtpbmQsIG5zcG5hbWUsIHJlbG5h bWUpOworCisJaWYgKHJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJ CUxpc3QgKmluaGVyaXRvcnM7CisJCUxpc3RDZWxsICpsYzsKKworCQlpbmhlcml0b3JzID0gZmlu ZF9hbGxfaW5oZXJpdG9ycyhyZWxpZCwKKwkJCQkJCQkJCQkgQWNjZXNzU2hhcmVMb2NrLAorCQkJ CQkJCQkJCSBOVUxMKTsKKwkJZm9yZWFjaCAobGMsIGluaGVyaXRvcnMpCisJCXsKKwkJCU9pZCBj aGlsZF9vaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCVJlbGF0aW9uIGNoaWxkX3JlbCA9IFJlbGF0 aW9uSWRHZXRSZWxhdGlvbihjaGlsZF9vaWQpOworCQkJY2hhciAqcmVsbmFtZTsKKwkJCWNoYXIg Km5zcG5hbWU7CisKKwkJCXJlbG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjaGlsZF9y ZWwpOworCQkJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFj ZShjaGlsZF9yZWwpKTsKKworCQkJQ2hlY2tTdWJzY3JpcHRpb25SZWxraW5kKGNoaWxkX3JlbC0+ cmRfcmVsLT5yZWxraW5kLCBuc3BuYW1lLCByZWxuYW1lKTsKKwkJCXRhYmxlX2Nsb3NlKGNoaWxk X3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCBlOTg5MDQ3NjgxLi4zMDdhYjBiNTU5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC0zOTIsOSArMzky LDEwIEBAIGxvZ2ljYWxyZXBfcmVsX29wZW4oTG9naWNhbFJlcFJlbElkIHJlbW90ZWlkLCBMT0NL TU9ERSBsb2NrbW9kZSkKIAkJZW50cnktPmxvY2FscmVsID0gdGFibGVfb3BlbihyZWxpZCwgTm9M b2NrKTsKIAkJZW50cnktPmxvY2FscmVsb2lkID0gcmVsaWQ7CiAKLQkJLyogQ2hlY2sgZm9yIHN1 cHBvcnRlZCByZWxraW5kLiAqLwotCQlDaGVja1N1YnNjcmlwdGlvblJlbGtpbmQoZW50cnktPmxv Y2FscmVsLT5yZF9yZWwtPnJlbGtpbmQsCi0JCQkJCQkJCSByZW1vdGVyZWwtPm5zcG5hbWUsIHJl bW90ZXJlbC0+cmVsbmFtZSk7CisJCS8qIENoZWNrIGZvciBzdXBwb3J0ZWQgcmVsa2luZCByZWN1 cnNpdmVseS4gKi8KKwkJQ2hlY2tTdWJzY3JpcHRpb25SZWxhdGlvbihlbnRyeS0+bG9jYWxyZWwt PnJkX3JlbC0+b2lkLAorCQkJCQkJCQkgIGVudHJ5LT5sb2NhbHJlbC0+cmRfcmVsLT5yZWxraW5k LAorCQkJCQkJCQkgIHJlbW90ZXJlbC0+bnNwbmFtZSwgcmVtb3RlcmVsLT5yZWxuYW1lKTsKIAog CQkvKgogCQkgKiBCdWlsZCB0aGUgbWFwcGluZyBvZiBsb2NhbCBhdHRyaWJ1dGUgbnVtYmVycyB0 byByZW1vdGUgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj dXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCBlZDk1ZWQxMTc2 Li43NTdhOGZhNzgwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTY0Niw4ICs2NDYsOCBA QCBleHRlcm4gdm9pZCBFeGVjU2ltcGxlUmVsYXRpb25EZWxldGUoUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywKIAkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2VhcmNoc2xvdCk7CiBleHRl cm4gdm9pZCBDaGVja0NtZFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWwsIENtZFR5cGUgY21k KTsKIAotZXh0ZXJuIHZvaWQgQ2hlY2tTdWJzY3JpcHRpb25SZWxraW5kKGNoYXIgcmVsa2luZCwg Y29uc3QgY2hhciAqbnNwbmFtZSwKLQkJCQkJCQkJCSBjb25zdCBjaGFyICpyZWxuYW1lKTsKK2V4 dGVybiB2b2lkIENoZWNrU3Vic2NyaXB0aW9uUmVsYXRpb24oT2lkIHJlbGlkLCBjaGFyIHJlbGtp bmQsIGNvbnN0IGNoYXIgKm5zcG5hbWUsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnJlbG5hbWUp OwogCiAvKgogICogcHJvdG90eXBlcyBmcm9tIGZ1bmN0aW9ucyBpbiBub2RlTW9kaWZ5VGFibGUu YwotLSAKMi4zMC4yCgo= --=-izp5UkSjZfF797lEfsW6--