Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7qYx-005klS-1P for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 08:04:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7qYv-00G0Bl-39 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 08:04:30 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7qYv-00G0Bd-10 for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 08:04:30 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7qYq-000000026bo-33lr for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 08:04:28 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2b2469e5117so4148665ad.1 for ; Wed, 01 Apr 2026 01:04:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775030663; x=1775635463; darn=lists.postgresql.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=e5TMTU2aqLtLvxGp1tG4S0At9Gd9Dj2FJw/ZX34EEe4=; b=ilUV2eBF6BzpzTbBxovC21oi7CrODo2BqIYvLiZg9KyPTMa/3JVuBeHUAfVIa0a7NK OUJVHiyK7evcZGknfOIdO+cLWzJCKbLfqKO/7MHXEG58SGNRDUrGEznLNFs5Cl/ACrhZ cqwuD/7tejVUsbRhZz7/BlQHa0QGOri3KcaBvEmOu2eRUFX5LJBvbNIAjDTR1zfq2zXh M5gB5K/H9jBBRLxUC66ZeQI8P0a0iQyZ3Sv4gM7U+UHSIXoyqprxTlO1tQQnOURxmvxC yVrVEkOgGiEmgUGsbFM/J2PqoZhX5B0WO88uCEHs73QEhunPsptL2GDmHz9W61e5HMRA MYjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775030663; x=1775635463; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=e5TMTU2aqLtLvxGp1tG4S0At9Gd9Dj2FJw/ZX34EEe4=; b=jrvzE4gxVcORG8KWvJWl/GqkAG2FdpejmnRWjpCCaxmxb+85buAelm7HLjoAnMKQa+ ULJPl3Ny3PDs1daCn7ABF5HUgcQXF+JyXL1XfXS+1MozeIObA1cNJMAiwIqrxED2uvAs 789eEC4+UtJdX/N8TMyIQudlkk/H+0vYOGKsezyRSSckXY1Egr4FayB8HyMLTdfd+HaX NCAQNJr1JWSJds+pDQDS/PF3R7MmGu6m4sbCMCZPg1LKF3VmGdYFiirdAa12x5T37gP6 zKKpvlaS9MdM5GcyfQVv8j1sQ0Tqp4LLUCFU0hzR2GIkpSVwJHn1Im5mKYh4uL16NZe+ GhFg== X-Gm-Message-State: AOJu0YylBAkyEOI3FyGPTSLvpAVYp+pJGpt7SrJjHe7JlAI/d2LxYfrG C4KFamlNQKVCYFSZ7Aen9YaeDsiM08EJB6LDf6ckPdnFWjx9pOnTcLdbGMNoC1GPODw= X-Gm-Gg: ATEYQzwWB37UkcpN1n5KhxTbb0rlH9HfRLyfyF9a+HZhz4zjz3VMUKpk7tCD44rZyok v7eCUdepRdsCoYlKBZdV68WktlyM+WsRKy4TOuaGiD+YeHTRqgYzqhRjgGqEFPnTvZzg5flraqg kR4E0Fed3UtVQ9qhmFRUJcrh24YpEzDr7MOSNddWWf+9q9/oVgoejgQ3qYMbHbVtf/0rfPj0Q5K e14Uok3pZmTzxbhteTNyA9QW0Qu1kZiH7nC34PDkjWn63GMpcPBsEC1SjHilLwxsZ4/JdNb0dUU oHi7JSEpKsqDdGt3QFvCTJ40PMFx44dYDPlf5AlwXYx4AHYeG4Hqk2XhkC5S2WZXuNN9tML7LMV MedXAsHTmRmUYVLTrd19zB/sJMqwXb5YWm9DJxEVlJWfwQ0lGlEglYqBIfDcEgeROEEnLGfAp1v x2YzYQGTD43eSEWyQd1MWJscRqP5rHZX/V X-Received: by 2002:a17:902:f650:b0:2b0:6365:217e with SMTP id d9443c01a7336-2b2698237ffmr23454795ad.15.1775030663246; Wed, 01 Apr 2026 01:04:23 -0700 (PDT) Received: from smtpclient.apple ([185.135.79.125]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b24268e7f5sm136810655ad.35.2026.04.01.01.04.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 Apr 2026 01:04:22 -0700 (PDT) From: Chao Li Message-Id: <56126CD5-9B14-456C-AF70-DBB12A3E4CDB@gmail.com> Content-Type: multipart/mixed; boundary="Apple-Mail=_29CA0D6E-E0E1-40E9-B6FD-34E6644A4F69" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.400.21\)) Subject: Re: ALTER TABLE: warn when actions do not recurse to partitions Date: Wed, 1 Apr 2026 16:03:48 +0800 In-Reply-To: <74084E4E-4763-4A23-9886-FEB4DF67859B@gmail.com> Cc: Greg Sabino Mullane , Jim Jones , "David G. Johnston" , Zsolt Parragi To: Postgres hackers References: <6eff5e43-cacd-4a2a-ad1d-e3b313c86050@uni-muenster.de> <950BB7B5-0180-4C36-82A0-7E17B920F740@gmail.com> <8ECD9403-F0BB-4971-94CF-2709EEB4E3B9@gmail.com> <9174F0CF-2F70-4B4F-AED4-CAF113B7F093@gmail.com> <14669a83-c7b4-4cdf-890c-dceecd025ee1@uni-muenster.de> <3F59D90E-9A47-4C1C-B330-D62D668A462E@gmail.com> <5e01263a-1994-44d5-9e98-7212acf9c985@uni-muenster.de> <8DB1987E-08F3-46EE-B440-A1358310486B@gmail.com> <8D28407D-A48B-42F4-88C9-A1EE182898F3@gmail.com> <74084E4E-4763-4A23-9886-FEB4DF67859B@gmail.com> X-Mailer: Apple Mail (2.3864.400.21) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Mail=_29CA0D6E-E0E1-40E9-B6FD-34E6644A4F69 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Apr 1, 2026, at 16:01, Chao Li wrote: >=20 >=20 >=20 >> On Mar 13, 2026, at 11:16, Chao Li wrote: >>=20 >>=20 >>=20 >>> On Mar 13, 2026, at 05:45, Zsolt Parragi = wrote: >>>=20 >>> Hello >>>=20 >>>> Affected sub-commands include: >>>> ... >>>=20 >>> Shouldn't SET ACCESS METHOD be included in this list? >>>=20 >>> It only changes the catalog entry for the parent, existing = partitions >>> stay as-is. It only sets the access method for future direct child >>> partitions. >>=20 >> Good catch. I missed SET ACCESS METHOD. Thanks a lot. >>=20 >> PFA v9: >> * Included SET ACCESS METHOD >> * Added a new test case where if the sub-command fails, then the = notice message should not show up >>=20 >> Best regards, >> -- >> Chao Li (Evan) >> HighGo Software Co., Ltd. >> https://www.highgo.com/ >>=20 >>=20 >>=20 >>=20 >> >=20 > PFA v10 - fixed a test failure. >=20 Oops, forgot the attachment. -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ --Apple-Mail=_29CA0D6E-E0E1-40E9-B6FD-34E6644A4F69 Content-Disposition: attachment; filename=v10-0001-ALTER-TABLE-emit-NOTICE-when-ONLY-is-omitted-but.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v10-0001-ALTER-TABLE-emit-NOTICE-when-ONLY-is-omitted-but.patch" Content-Transfer-Encoding: quoted-printable =46rom=20269c0b03046a7cd0ec4cd7ed0136b0f8db450ccf=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Mon,=2012=20Jan=202026=2016:56:58=20+0800=0ASubject:=20[PATCH=20= v10]=20ALTER=20TABLE:=20emit=20NOTICE=20when=20ONLY=20is=20omitted=20but=20= no=0A=20partition=20recursion=20occurs=0A=0ASome=20ALTER=20TABLE=20= sub-commands=20do=20not=20recurse=20to=20partitions=20even=20when=20ONLY=0A= is=20not=20specified=20on=20a=20partitioned=20table.=20=20This=20can=20= be=20surprising,=20since=0Athe=20default=20expectation=20is=20that=20= commands=20propagate=20to=20all=20partitions.=0A=0AEmit=20a=20NOTICE=20= in=20such=20cases=20to=20make=20the=20behavior=20explicit,=20and=20= advise=20how=0Ato=20suppress=20the=20message=20or=20modify=20partitions=20= individually.=0A=0AAffected=20sub-commands=20include:=0A=20=20-=20ALTER=20= COLUMN=20SET/RESET=20attribute_option=0A=20=20-=20ALTER=20COLUMN=20SET=20= COMPRESSION=0A=20=20-=20ENABLE/DISABLE=20RULE=0A=20=20-=20= ENABLE/DISABLE/FORCE/NO=20FORCE=20ROW=20LEVEL=20SECURITY=0A=20=20-=20= REPLICA=20IDENTITY=0A=20=20-=20OWNER=20TO=0A=20=20-=20SET=20ACCESS=20= METHOD=0A=20=20-=20SET=20TABLESPACE=0A=20=20-=20SET=20SCHEMA=0A=0ARENAME=20= is=20intentionally=20excluded.=20Using=20ONLY=20(or=20not)=20has=20no=20= effect=20for=0ARENAME,=20since=20relation=20names=20are=20independent=20= by=20nature=20and=20there=20is=20no=0Aexpectation=20of=20recursion.=0A=0A= OF=20/=20NOT=20OF=20are=20also=20excluded.=20Using=20ONLY=20has=20no=20= effect=20for=20these=0Acommands,=20as=20they=20apply=20only=20to=20the=20= partitioned=20table=20itself=20and=20not=20to=0Aits=20partitions.=0A=0A= Regression=20tests=20are=20updated=20to=20use=20ONLY=20where=20= appropriate.=0A=0AAuthor:=20Chao=20Li=20=0AReviewed-by:=20= David=20G.=20Johnston=20=0AReviewed-by:=20= Greg=20Sabino=20Mullane=20=0AReviewed-by:=20Jim=20= Jones=20=0AReviewed-by:=20Zsolt=20Parragi=20= =0ADiscussion:=20= https://postgr.es/m/CAEoWx2=3DSLga-xH09Cq_PAvsHhQHrBK+V0vF821JKgzS=3DBm0ha= A@mail.gmail.com=0A---=0A=20src/backend/commands/tablecmds.c=20=20=20=20=20= =20=20=20=20=20=20=20=20=20|=20138=20++++++++++++++++--=0A=20= src/include/nodes/parsenodes.h=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=201=20+=0A=20src/test/regress/expected/alter_table.out=20=20=20= =20=20|=20=2092=20+++++++++++-=0A=20= src/test/regress/expected/cluster.out=20=20=20=20=20=20=20=20=20|=20=20=20= 2=20+-=0A=20src/test/regress/expected/create_am.out=20=20=20=20=20=20=20= |=20=2016=20+-=0A=20src/test/regress/expected/graph_table_rls.out=20|=20=20= =206=20+-=0A=20src/test/regress/expected/merge.out=20=20=20=20=20=20=20=20= =20=20=20|=20=20=204=20+-=0A=20= src/test/regress/expected/partition_merge.out=20|=20=20=202=20+-=0A=20= src/test/regress/expected/partition_split.out=20|=20=20=202=20+-=0A=20= src/test/regress/expected/privileges.out=20=20=20=20=20=20|=20=20=202=20= +-=0A=20src/test/regress/expected/rowsecurity.out=20=20=20=20=20|=20=20=20= 4=20+-=0A=20src/test/regress/expected/tablespace.out=20=20=20=20=20=20|=20= =20=204=20+-=0A=20src/test/regress/expected/update.out=20=20=20=20=20=20=20= =20=20=20|=20=20=202=20+-=0A=20src/test/regress/expected/vacuum.out=20=20= =20=20=20=20=20=20=20=20|=20=20=206=20+-=0A=20= src/test/regress/sql/alter_table.sql=20=20=20=20=20=20=20=20=20=20|=20=20= 71=20++++++++-=0A=20src/test/regress/sql/cluster.sql=20=20=20=20=20=20=20= =20=20=20=20=20=20=20|=20=20=202=20+-=0A=20= src/test/regress/sql/create_am.sql=20=20=20=20=20=20=20=20=20=20=20=20|=20= =2016=20+-=0A=20src/test/regress/sql/graph_table_rls.sql=20=20=20=20=20=20= |=20=20=206=20+-=0A=20src/test/regress/sql/merge.sql=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20|=20=20=204=20+-=0A=20= src/test/regress/sql/partition_merge.sql=20=20=20=20=20=20|=20=20=202=20= +-=0A=20src/test/regress/sql/partition_split.sql=20=20=20=20=20=20|=20=20= =202=20+-=0A=20src/test/regress/sql/privileges.sql=20=20=20=20=20=20=20=20= =20=20=20|=20=20=202=20+-=0A=20src/test/regress/sql/rowsecurity.sql=20=20= =20=20=20=20=20=20=20=20|=20=20=204=20+-=0A=20= src/test/regress/sql/tablespace.sql=20=20=20=20=20=20=20=20=20=20=20|=20=20= =204=20+-=0A=20src/test/regress/sql/update.sql=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20|=20=20=202=20+-=0A=20src/test/regress/sql/vacuum.sql=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=206=20+-=0A=2026=20= files=20changed,=20337=20insertions(+),=2065=20deletions(-)=0A=0Adiff=20= --git=20a/src/backend/commands/tablecmds.c=20= b/src/backend/commands/tablecmds.c=0Aindex=208b4ebc6f226..50a16666bde=20= 100644=0A---=20a/src/backend/commands/tablecmds.c=0A+++=20= b/src/backend/commands/tablecmds.c=0A@@=20-476,7=20+476,8=20@@=20static=20= void=20ATController(AlterTableStmt=20*parsetree,=0A=20=09=09=09=09=09=09=20= AlterTableUtilityContext=20*context);=0A=20static=20void=20= ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20AlterTableCmd=20*cmd,=0A=20= =09=09=09=09=09=20=20bool=20recurse,=20bool=20recursing,=20LOCKMODE=20= lockmode,=0A-=09=09=09=09=09=20=20AlterTableUtilityContext=20*context);=0A= +=09=09=09=09=09=20=20AlterTableUtilityContext=20*context,=0A+=09=09=09=09= =09=20=20List=20**pendingNotice);=0A=20static=20void=20= ATRewriteCatalogs(List=20**wqueue,=20LOCKMODE=20lockmode,=0A=20=09=09=09=09= =09=09=09=20=20AlterTableUtilityContext=20*context);=0A=20static=20void=20= ATExecCmd(List=20**wqueue,=20AlteredTableInfo=20*tab,=0A@@=20-760,6=20= +761,10=20@@=20static=20void=20ATExecMergePartitions(List=20**wqueue,=20= AlteredTableInfo=20*tab,=20Relation=0A=20static=20void=20= ATExecSplitPartition(List=20**wqueue,=20AlteredTableInfo=20*tab,=0A=20=09= =09=09=09=09=09=09=09=20Relation=20rel,=20PartitionCmd=20*cmd,=0A=20=09=09= =09=09=09=09=09=09=20AlterTableUtilityContext=20*context);=0A+static=20= void=20CollectPartitionNoRecurseNotice(AlterTableType=20cmdtype,=20= Relation=20rel,=0A+=09=09=09=09=09=09=09=09=09=09=09bool=20recurse,=20= bool=20recursing,=0A+=09=09=09=09=09=09=09=09=09=09=09List=20= **pendingNotice);=0A+static=20void=20EmitPartitionNoRecurseNotice(List=20= *pendingNotice);=0A=20=0A=20/*=20= ----------------------------------------------------------------=0A=20=20= *=09=09DefineRelation=0A@@=20-4909,13=20+4914,14=20@@=20= ATController(AlterTableStmt=20*parsetree,=0A=20{=0A=20=09List=09=20=20=20= *wqueue=20=3D=20NIL;=0A=20=09ListCell=20=20=20*lcmd;=0A+=09List=09=20=20=20= *pendingNotice=20=3D=20NIL;=0A=20=0A=20=09/*=20Phase=201:=20preliminary=20= examination=20of=20commands,=20create=20work=20queue=20*/=0A=20=09= foreach(lcmd,=20cmds)=0A=20=09{=0A=20=09=09AlterTableCmd=20*cmd=20=3D=20= (AlterTableCmd=20*)=20lfirst(lcmd);=0A=20=0A-=09=09ATPrepCmd(&wqueue,=20= rel,=20cmd,=20recurse,=20false,=20lockmode,=20context);=0A+=09=09= ATPrepCmd(&wqueue,=20rel,=20cmd,=20recurse,=20false,=20lockmode,=20= context,=20&pendingNotice);=0A=20=09}=0A=20=0A=20=09/*=20Close=20the=20= relation,=20but=20keep=20lock=20until=20commit=20*/=0A@@=20-4926,6=20= +4932,9=20@@=20ATController(AlterTableStmt=20*parsetree,=0A=20=0A=20=09= /*=20Phase=203:=20scan/rewrite=20tables=20as=20needed,=20and=20run=20= afterStmts=20*/=0A=20=09ATRewriteTables(parsetree,=20&wqueue,=20= lockmode,=20context);=0A+=0A+=09/*=20Emit=20post-notice=20for=20= partitions=20that=20were=20not=20recursed=20into.=20*/=0A+=09= EmitPartitionNoRecurseNotice(pendingNotice);=0A=20}=0A=20=0A=20/*=0A@@=20= -4940,7=20+4949,8=20@@=20ATController(AlterTableStmt=20*parsetree,=0A=20= static=20void=0A=20ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20= AlterTableCmd=20*cmd,=0A=20=09=09=20=20bool=20recurse,=20bool=20= recursing,=20LOCKMODE=20lockmode,=0A-=09=09=20=20= AlterTableUtilityContext=20*context)=0A+=09=09=20=20= AlterTableUtilityContext=20*context,=0A+=09=09=20=20List=20= **pendingNotice)=0A=20{=0A=20=09AlteredTableInfo=20*tab;=0A=20=09= AlterTablePass=20pass=20=3D=20AT_PASS_UNSET;=0A@@=20-5089,6=20+5099,8=20= @@=20ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20AlterTableCmd=20= *cmd,=0A=20=09=09=09=09=09=09=09=09ATT_MATVIEW=20|=20ATT_FOREIGN_TABLE);=0A= =20=09=09=09/*=20This=20command=20never=20recurses=20*/=0A=20=09=09=09= pass=20=3D=20AT_PASS_MISC;=0A+=09=09=09/*=20Emit=20a=20notice=20if=20= needed=20*/=0A+=09=09=09CollectPartitionNoRecurseNotice(cmd->subtype,=20= rel,=20recurse,=20recursing,=20pendingNotice);=0A=20=09=09=09break;=0A=20= =09=09case=20AT_SetStorage:=09=09/*=20ALTER=20COLUMN=20SET=20STORAGE=20= */=0A=20=09=09=09ATSimplePermissions(cmd->subtype,=20rel,=0A@@=20-5104,6=20= +5116,8=20@@=20ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20= AlterTableCmd=20*cmd,=0A=20=09=09=09/*=20This=20command=20never=20= recurses=20*/=0A=20=09=09=09/*=20No=20command-specific=20prep=20needed=20= */=0A=20=09=09=09pass=20=3D=20AT_PASS_MISC;=0A+=09=09=09/*=20Emit=20a=20= notice=20if=20needed=20*/=0A+=09=09=09= CollectPartitionNoRecurseNotice(cmd->subtype,=20rel,=20recurse,=20= recursing,=20pendingNotice);=0A=20=09=09=09break;=0A=20=09=09case=20= AT_DropColumn:=09=09/*=20DROP=20COLUMN=20*/=0A=20=09=09=09= ATSimplePermissions(cmd->subtype,=20rel,=0A@@=20-5171,6=20+5185,8=20@@=20= ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20AlterTableCmd=20*cmd,=0A=20= =09=09=09/*=20This=20command=20never=20recurses=20*/=0A=20=09=09=09/*=20= No=20command-specific=20prep=20needed=20*/=0A=20=09=09=09pass=20=3D=20= AT_PASS_MISC;=0A+=09=09=09/*=20Emit=20a=20notice=20if=20needed=20*/=0A+=09= =09=09CollectPartitionNoRecurseNotice(cmd->subtype,=20rel,=20recurse,=20= recursing,=20pendingNotice);=0A=20=09=09=09break;=0A=20=09=09case=20= AT_ClusterOn:=09=09/*=20CLUSTER=20ON=20*/=0A=20=09=09case=20= AT_DropCluster:=09/*=20SET=20WITHOUT=20CLUSTER=20*/=0A@@=20-5207,6=20= +5223,8=20@@=20ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20= AlterTableCmd=20*cmd,=0A=20=0A=20=09=09=09ATPrepSetAccessMethod(tab,=20= rel,=20cmd->name);=0A=20=09=09=09pass=20=3D=20AT_PASS_MISC;=09/*=20does=20= not=20matter;=20no=20work=20in=20Phase=202=20*/=0A+=09=09=09/*=20Emit=20= a=20notice=20if=20needed=20*/=0A+=09=09=09= CollectPartitionNoRecurseNotice(cmd->subtype,=20rel,=20recurse,=20= recursing,=20pendingNotice);=0A=20=09=09=09break;=0A=20=09=09case=20= AT_SetTableSpace:=09/*=20SET=20TABLESPACE=20*/=0A=20=09=09=09= ATSimplePermissions(cmd->subtype,=20rel,=20ATT_TABLE=20|=20= ATT_PARTITIONED_TABLE=20|=0A@@=20-5214,6=20+5232,8=20@@=20ATPrepCmd(List=20= **wqueue,=20Relation=20rel,=20AlterTableCmd=20*cmd,=0A=20=09=09=09/*=20= This=20command=20never=20recurses=20*/=0A=20=09=09=09= ATPrepSetTableSpace(tab,=20rel,=20cmd->name,=20lockmode);=0A=20=09=09=09= pass=20=3D=20AT_PASS_MISC;=09/*=20doesn't=20actually=20matter=20*/=0A+=09= =09=09/*=20Emit=20a=20notice=20if=20needed=20*/=0A+=09=09=09= CollectPartitionNoRecurseNotice(cmd->subtype,=20rel,=20recurse,=20= recursing,=20pendingNotice);=0A=20=09=09=09break;=0A=20=09=09case=20= AT_SetRelOptions:=09/*=20SET=20(...)=20*/=0A=20=09=09case=20= AT_ResetRelOptions:=09/*=20RESET=20(...)=20*/=0A@@=20-5223,6=20+5243,7=20= @@=20ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20AlterTableCmd=20= *cmd,=0A=20=09=09=09=09=09=09=09=09ATT_MATVIEW=20|=20ATT_INDEX);=0A=20=09= =09=09/*=20This=20command=20never=20recurses=20*/=0A=20=09=09=09/*=20No=20= command-specific=20prep=20needed=20*/=0A+=09=09=09/*=20It=20will=20check=20= for=20partitioned=20table=20at=20exec=20time=20*/=0A=20=09=09=09pass=20=3D= =20AT_PASS_MISC;=0A=20=09=09=09break;=0A=20=09=09case=20AT_AddInherit:=09= =09/*=20INHERIT=20*/=0A@@=20-5260,8=20+5281,8=20@@=20ATPrepCmd(List=20= **wqueue,=20Relation=20rel,=20AlterTableCmd=20*cmd,=0A=20=09=09=09= ATSimplePermissions(cmd->subtype,=20rel,=0A=20=09=09=09=09=09=09=09=09= ATT_TABLE=20|=20ATT_PARTITIONED_TABLE=20|=20ATT_MATVIEW);=0A=20=09=09=09= pass=20=3D=20AT_PASS_MISC;=0A-=09=09=09/*=20This=20command=20never=20= recurses=20*/=0A-=09=09=09/*=20No=20command-specific=20prep=20needed=20= */=0A+=09=09=09/*=20This=20command=20doesn't=20recurse=20to=20= partitions,=20so=20notice=20if=20needed=20*/=0A+=09=09=09= CollectPartitionNoRecurseNotice(cmd->subtype,=20rel,=20recurse,=20= recursing,=20pendingNotice);=0A=20=09=09=09break;=0A=20=09=09case=20= AT_EnableTrig:=09=09/*=20ENABLE=20TRIGGER=20variants=20*/=0A=20=09=09= case=20AT_EnableAlwaysTrig:=0A@@=20-5282,17=20+5303,30=20@@=20= ATPrepCmd(List=20**wqueue,=20Relation=20rel,=20AlterTableCmd=20*cmd,=0A=20= =09=09case=20AT_EnableAlwaysRule:=0A=20=09=09case=20= AT_EnableReplicaRule:=0A=20=09=09case=20AT_DisableRule:=0A-=09=09case=20= AT_AddOf:=09=09=09/*=20OF=20*/=0A-=09=09case=20AT_DropOf:=09=09=09/*=20= NOT=20OF=20*/=0A-=09=09case=20AT_EnableRowSecurity:=0A+=09=09case=20= AT_EnableRowSecurity:=09/*=20ENABLE/DISABLE=20ROW=20SECURITY=20variants=20= */=0A=20=09=09case=20AT_DisableRowSecurity:=0A-=09=09case=20= AT_ForceRowSecurity:=0A+=09=09case=20AT_ForceRowSecurity:=09/*=20= FORCE/NO=20FORCE=20ROW=20SECURITY=20variants=20*/=0A=20=09=09case=20= AT_NoForceRowSecurity:=0A=20=09=09=09ATSimplePermissions(cmd->subtype,=20= rel,=0A=20=09=09=09=09=09=09=09=09ATT_TABLE=20|=20= ATT_PARTITIONED_TABLE);=0A=20=09=09=09/*=20These=20commands=20never=20= recurse=20*/=0A=20=09=09=09/*=20No=20command-specific=20prep=20needed=20= */=0A=20=09=09=09pass=20=3D=20AT_PASS_MISC;=0A+=09=09=09/*=20Emit=20a=20= notice=20if=20needed=20*/=0A+=09=09=09= CollectPartitionNoRecurseNotice(cmd->subtype,=20rel,=20recurse,=20= recursing,=20pendingNotice);=0A+=09=09=09break;=0A+=09=09case=20= AT_AddOf:=09=09=09/*=20OF=20*/=0A+=09=09case=20AT_DropOf:=09=09=09/*=20= NOT=20OF=20*/=0A+=09=09=09ATSimplePermissions(cmd->subtype,=20rel,=0A+=09= =09=09=09=09=09=09=09ATT_TABLE=20|=20ATT_PARTITIONED_TABLE);=0A+=09=09=09= /*=20These=20commands=20never=20recurse=20*/=0A+=09=09=09/*=20No=20= command-specific=20prep=20needed=20*/=0A+=0A+=09=09=09/*=0A+=09=09=09=20= *=20They=20only=20work=20on=20partitioned=20tables=20but=20child=20= partitions,=20thus=0A+=09=09=09=20*=20no=20need=20to=20emit=20a=20notice=0A= +=09=09=09=20*/=0A+=09=09=09pass=20=3D=20AT_PASS_MISC;=0A=20=09=09=09= break;=0A=20=09=09case=20AT_GenericOptions:=0A=20=09=09=09= ATSimplePermissions(cmd->subtype,=20rel,=20ATT_FOREIGN_TABLE);=0A@@=20= -6786,6=20+6820,8=20@@=20alter_table_type_to_string(AlterTableType=20= cmdtype)=0A=20=09=09=09return=20"ALTER=20COLUMN=20...=20DROP=20= IDENTITY";=0A=20=09=09case=20AT_ReAddStatistics:=0A=20=09=09=09return=20= NULL;=09=09/*=20not=20real=20grammar=20*/=0A+=09=09case=20AT_SetSchema:=0A= +=09=09=09return=20"SET=20SCHEMA";=0A=20=09}=0A=20=0A=20=09return=20= NULL;=0A@@=20-6907,7=20+6943,7=20@@=20ATSimpleRecursion(List=20**wqueue,=20= Relation=20rel,=0A=20=09=09=09/*=20find_all_inheritors=20already=20got=20= lock=20*/=0A=20=09=09=09childrel=20=3D=20relation_open(childrelid,=20= NoLock);=0A=20=09=09=09CheckAlterTableIsSafe(childrel);=0A-=09=09=09= ATPrepCmd(wqueue,=20childrel,=20cmd,=20false,=20true,=20lockmode,=20= context);=0A+=09=09=09ATPrepCmd(wqueue,=20childrel,=20cmd,=20false,=20= true,=20lockmode,=20context,=20NULL);=0A=20=09=09=09= relation_close(childrel,=20NoLock);=0A=20=09=09}=0A=20=09}=0A@@=20= -6970,7=20+7006,7=20@@=20ATTypedTableRecursion(List=20**wqueue,=20= Relation=20rel,=20AlterTableCmd=20*cmd,=0A=20=0A=20=09=09childrel=20=3D=20= relation_open(childrelid,=20lockmode);=0A=20=09=09= CheckAlterTableIsSafe(childrel);=0A-=09=09ATPrepCmd(wqueue,=20childrel,=20= cmd,=20true,=20true,=20lockmode,=20context);=0A+=09=09ATPrepCmd(wqueue,=20= childrel,=20cmd,=20true,=20true,=20lockmode,=20context,=20NULL);=0A=20=09= =09relation_close(childrel,=20NoLock);=0A=20=09}=0A=20}=0A@@=20-9641,7=20= +9677,7=20@@=20ATPrepAddPrimaryKey(List=20**wqueue,=20Relation=20rel,=20= AlterTableCmd=20*cmd,=0A=20=09=09newcmd->recurse=20=3D=20true;=0A=20=09=09= newcmd->def=20=3D=20(Node=20*)=20nnconstr;=0A=20=0A-=09=09= ATPrepCmd(wqueue,=20rel,=20newcmd,=20true,=20false,=20lockmode,=20= context);=0A+=09=09ATPrepCmd(wqueue,=20rel,=20newcmd,=20true,=20false,=20= lockmode,=20context,=20NULL);=0A=20=09}=0A=20}=0A=20=0A@@=20-14891,7=20= +14927,7=20@@=20ATPrepAlterColumnType(List=20**wqueue,=0A=20=09=09=09=09=09= =09=09=20errdetail("USING=20expression=20contains=20a=20whole-row=20= table=20reference.")));=0A=20=09=09=09=09pfree(attmap);=0A=20=09=09=09}=0A= -=09=09=09ATPrepCmd(wqueue,=20childrel,=20cmd,=20false,=20true,=20= lockmode,=20context);=0A+=09=09=09ATPrepCmd(wqueue,=20childrel,=20cmd,=20= false,=20true,=20lockmode,=20context,=20NULL);=0A=20=09=09=09= relation_close(childrel,=20NoLock);=0A=20=09=09}=0A=20=09}=0A@@=20= -19189,6=20+19225,7=20@@=20AlterTableNamespace(AlterObjectSchemaStmt=20= *stmt,=20Oid=20*oldschema)=0A=20=09RangeVar=20=20=20*newrv;=0A=20=09= ObjectAddresses=20*objsMoved;=0A=20=09ObjectAddress=20myself;=0A+=09List=09= =20=20=20*pendingNotice=20=3D=20NIL;=0A=20=0A=20=09relid=20=3D=20= RangeVarGetRelidExtended(stmt->relation,=20AccessExclusiveLock,=0A=20=09=09= =09=09=09=09=09=09=09=20stmt->missing_ok=20?=20RVR_MISSING_OK=20:=200,=0A= @@=20-19205,6=20+19242,13=20@@=20= AlterTableNamespace(AlterObjectSchemaStmt=20*stmt,=20Oid=20*oldschema)=0A= =20=0A=20=09rel=20=3D=20relation_open(relid,=20NoLock);=0A=20=0A+=09/*=0A= +=09=20*=20SET=20SCHEMA=20doesn't=20recurse=20to=20children,=20emit=20a=20= notice=20if=20ONLY=20is=20not=0A+=09=20*=20specified.=20As=20this=20= action=20doesn't=20go=20through=20ATPrepCmd,=20we=20have=20to=20emit=0A+=09= =20*=20the=20notice=20here.=0A+=09=20*/=0A+=09= CollectPartitionNoRecurseNotice(AT_SetSchema,=20rel,=20= stmt->relation->inh,=20false,=20&pendingNotice);=0A+=0A=20=09oldNspOid=20= =3D=20RelationGetNamespace(rel);=0A=20=0A=20=09/*=20If=20it's=20an=20= owned=20sequence,=20disallow=20moving=20it=20by=20itself.=20*/=0A@@=20= -19242,6=20+19286,8=20@@=20AlterTableNamespace(AlterObjectSchemaStmt=20= *stmt,=20Oid=20*oldschema)=0A=20=09/*=20close=20rel,=20but=20keep=20lock=20= until=20commit=20*/=0A=20=09relation_close(rel,=20NoLock);=0A=20=0A+=09= EmitPartitionNoRecurseNotice(pendingNotice);=0A+=0A=20=09return=20= myself;=0A=20}=0A=20=0A@@=20-23601,3=20+23647,69=20@@=20= ATExecSplitPartition(List=20**wqueue,=20AlteredTableInfo=20*tab,=20= Relation=20rel,=0A=20=09/*=20Restore=20the=20userid=20and=20security=20= context.=20*/=0A=20=09SetUserIdAndSecContext(save_userid,=20= save_sec_context);=0A=20}=0A+=0A+/*=0A+=20*=20When=20ONLY=20is=20not=20= specified=20with=20a=20partitioned=20table,=20it=20is=20expected=20that=20= the=0A+=20*=20command=20recurses=20to=20all=20partitions.=20However,=20= some=20sub-commands=20do=20not=20recurse.=0A+=20*=20In=20such=20cases,=20= emit=20a=20NOTICE=20to=20make=20this=20behavior=20explicit=20to=20the=20= user.=0A+=20*/=0A+static=20void=0A= +CollectPartitionNoRecurseNotice(AlterTableType=20cmdtype,=20Relation=20= rel,=20bool=20recurse,=20bool=20recursing,=0A+=09=09=09=09=09=09=09=09= List=20**pendingNotice)=0A+{=0A+=09if=20(pendingNotice=20=3D=3D=20NULL)=0A= +=09=09return;=0A+=0A+=09/*=20Only=20emit=20the=20notice=20at=20the=20= top=20level=20of=20recursion=20*/=0A+=09if=20(rel->rd_rel->relkind=20=3D=3D= =20RELKIND_PARTITIONED_TABLE=20&&=20recurse=20&&=20!recursing)=0A+=09{=0A= +=09=09PartitionDesc=20pd=20=3D=20RelationGetPartitionDesc(rel,=20true);=0A= +=09=09int=09=09=09nparts=20=3D=20pd->nparts;=0A+=09=09const=20char=20= *action_str;=0A+=09=09char=09=20=20=20*notice_msg;=0A+=09=09const=20= ListCell=20*cell;=0A+=0A+=09=09/*=20Emit=20a=20notice=20only=20if=20= there=20are=20partitions=20*/=0A+=09=09if=20(nparts=20=3D=3D=200)=0A+=09=09= =09return;=0A+=0A+=09=09action_str=20=3D=20= alter_table_type_to_string(cmdtype);=0A+=09=09notice_msg=20=3D=20= psprintf(_("ALTER=20action=20%s=20on=20relation=20\"%s\"=20does=20not=20= affect=20present=20partitions"),=0A+=09=09=09=09=09=09=09=20=20= action_str,=0A+=09=09=09=09=09=09=09=20=20RelationGetRelationName(rel));=0A= +=0A+=09=09foreach(cell,=20*pendingNotice)=0A+=09=09{=0A+=09=09=09if=20= (strcmp((char=20*)=20lfirst(cell),=20notice_msg)=20=3D=3D=200)=0A+=09=09=09= {=0A+=09=09=09=09/*=20Skip=20the=20duplicate=20notice=20message=20*/=0A+=09= =09=09=09pfree(notice_msg);=0A+=09=09=09=09return;=0A+=09=09=09}=0A+=09=09= }=0A+=09=09*pendingNotice=20=3D=20lappend(*pendingNotice,=20notice_msg);=0A= +=09}=0A+}=0A+=0A+static=20void=0A+EmitPartitionNoRecurseNotice(List=20= *pendingNotice)=0A+{=0A+=09ListCell=20=20=20*cell;=0A+=09int=09=09=09= len;=0A+=09int=09=09=09i=20=3D=200;=0A+=0A+=09len=20=3D=20= list_length(pendingNotice);=0A+=09foreach(cell,=20pendingNotice)=0A+=09{=0A= +=09=09char=09=20=20=20*notice_msg=20=3D=20(char=20*)=20lfirst(cell);=0A= +=0A+=09=09/*=20Only=20emit=20the=20hint=20for=20the=20last=20notice=20= */=0A+=09=09i++;=0A+=09=09ereport(NOTICE,=20errmsg("%s",=20notice_msg),=0A= +=09=09=09=09(i=20=3D=3D=20len)=20?=0A+=09=09=09=09errhint("Partitions=20= may=20be=20modified=20individually,=20or=20specify=20ONLY=20to=20= suppress=20this=20message.")=0A+=09=09=09=09:=200);=0A+=09=09= pfree(notice_msg);=0A+=09}=0A+=09list_free(pendingNotice);=0A+}=0Adiff=20= --git=20a/src/include/nodes/parsenodes.h=20= b/src/include/nodes/parsenodes.h=0Aindex=20a501cdfb249..af69c0a341c=20= 100644=0A---=20a/src/include/nodes/parsenodes.h=0A+++=20= b/src/include/nodes/parsenodes.h=0A@@=20-2568,6=20+2568,7=20@@=20typedef=20= enum=20AlterTableType=0A=20=09AT_SetIdentity,=09=09=09=09/*=20SET=20= identity=20column=20options=20*/=0A=20=09AT_DropIdentity,=09=09=09/*=20= DROP=20IDENTITY=20*/=0A=20=09AT_ReAddStatistics,=09=09=09/*=20internal=20= to=20commands/tablecmds.c=20*/=0A+=09AT_SetSchema,=09=09=09=09/*=20SET=20= SCHEMA=20*/=0A=20}=20AlterTableType;=0A=20=0A=20typedef=20struct=20= AlterTableCmd=09/*=20one=20subcommand=20of=20an=20ALTER=20TABLE=20*/=0A= diff=20--git=20a/src/test/regress/expected/alter_table.out=20= b/src/test/regress/expected/alter_table.out=0Aindex=20= dad9d36937e..06973a1cd4a=20100644=0A---=20= a/src/test/regress/expected/alter_table.out=0A+++=20= b/src/test/regress/expected/alter_table.out=0A@@=20-4603,8=20+4603,98=20= @@=20SELECT=20*=20FROM=20list_parted;=0A=20---=0A=20(0=20rows)=0A=20=0A= +CREATE=20TABLE=20list_parted4=20(a=20int,=20b=20text)=20PARTITION=20BY=20= LIST=20(a);=0A+CREATE=20TABLE=20list_parted4_1=20PARTITION=20OF=20= list_parted4=20FOR=20VALUES=20IN=20(1);=0A+--=20set=20column=20attribute=20= on=20partitioned=20table=20without=20ONLY=20should=20get=20a=20notice=0A= +ALTER=20TABLE=20list_parted4=20ALTER=20COLUMN=20b=20SET=20(n_distinct=20= =3D=200.2);=0A+NOTICE:=20=20ALTER=20action=20ALTER=20COLUMN=20...=20SET=20= on=20relation=20"list_parted4"=20does=20not=20affect=20present=20= partitions=0A+HINT:=20=20Partitions=20may=20be=20modified=20= individually,=20or=20specify=20ONLY=20to=20suppress=20this=20message.=0A= +ALTER=20TABLE=20list_parted4=20ALTER=20COLUMN=20b=20RESET=20= (n_distinct);=0A+NOTICE:=20=20ALTER=20action=20ALTER=20COLUMN=20...=20= RESET=20on=20relation=20"list_parted4"=20does=20not=20affect=20present=20= partitions=0A+HINT:=20=20Partitions=20may=20be=20modified=20= individually,=20or=20specify=20ONLY=20to=20suppress=20this=20message.=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20ALTER=20COLUMN=20b=20SET=20= (n_distinct=20=3D=200.2);=0A+ALTER=20TABLE=20ONLY=20list_parted4=20ALTER=20= COLUMN=20b=20RESET=20(n_distinct);=0A+--=20enable/disable=20rules=20on=20= partitioned=20tables=20without=20ONLY=20should=20get=20a=20notice=0A= +CREATE=20RULE=20list_parted4_rule=20AS=20ON=20INSERT=20TO=20= list_parted4=20DO=20INSTEAD=20NOTHING;=0A+ALTER=20TABLE=20list_parted4=20= DISABLE=20RULE=20list_parted4_rule;=0A+NOTICE:=20=20ALTER=20action=20= DISABLE=20RULE=20on=20relation=20"list_parted4"=20does=20not=20affect=20= present=20partitions=0A+HINT:=20=20Partitions=20may=20be=20modified=20= individually,=20or=20specify=20ONLY=20to=20suppress=20this=20message.=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20DISABLE=20RULE=20= list_parted4_rule;=0A+ALTER=20TABLE=20list_parted4=20ENABLE=20RULE=20= list_parted4_rule;=0A+NOTICE:=20=20ALTER=20action=20ENABLE=20RULE=20on=20= relation=20"list_parted4"=20does=20not=20affect=20present=20partitions=0A= +HINT:=20=20Partitions=20may=20be=20modified=20individually,=20or=20= specify=20ONLY=20to=20suppress=20this=20message.=0A+ALTER=20TABLE=20ONLY=20= list_parted4=20ENABLE=20RULE=20list_parted4_rule;=0A+DROP=20RULE=20= list_parted4_rule=20ON=20list_parted4;=0A+--=20enable/disable=20row=20= level=20security=20on=20partitioned=20tables=20without=20ONLY=20should=20= get=20a=20notice=0A+ALTER=20TABLE=20list_parted4=20ENABLE=20ROW=20LEVEL=20= SECURITY;=0A+NOTICE:=20=20ALTER=20action=20ENABLE=20ROW=20SECURITY=20on=20= relation=20"list_parted4"=20does=20not=20affect=20present=20partitions=0A= +HINT:=20=20Partitions=20may=20be=20modified=20individually,=20or=20= specify=20ONLY=20to=20suppress=20this=20message.=0A+ALTER=20TABLE=20ONLY=20= list_parted4=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20= list_parted4=20DISABLE=20ROW=20LEVEL=20SECURITY;=0A+NOTICE:=20=20ALTER=20= action=20DISABLE=20ROW=20SECURITY=20on=20relation=20"list_parted4"=20= does=20not=20affect=20present=20partitions=0A+HINT:=20=20Partitions=20= may=20be=20modified=20individually,=20or=20specify=20ONLY=20to=20= suppress=20this=20message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20= DISABLE=20ROW=20LEVEL=20SECURITY;=0A+--=20force/no=20force=20row=20level=20= security=20on=20partitioned=20tables=20without=20ONLY=20should=20get=20a=20= notice=0A+ALTER=20TABLE=20list_parted4=20FORCE=20ROW=20LEVEL=20SECURITY;=0A= +NOTICE:=20=20ALTER=20action=20FORCE=20ROW=20SECURITY=20on=20relation=20= "list_parted4"=20does=20not=20affect=20present=20partitions=0A+HINT:=20=20= Partitions=20may=20be=20modified=20individually,=20or=20specify=20ONLY=20= to=20suppress=20this=20message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20= FORCE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20list_parted4=20NO=20= FORCE=20ROW=20LEVEL=20SECURITY;=0A+NOTICE:=20=20ALTER=20action=20NO=20= FORCE=20ROW=20SECURITY=20on=20relation=20"list_parted4"=20does=20not=20= affect=20present=20partitions=0A+HINT:=20=20Partitions=20may=20be=20= modified=20individually,=20or=20specify=20ONLY=20to=20suppress=20this=20= message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20NO=20FORCE=20ROW=20= LEVEL=20SECURITY;=0A+--=20set=20replica=20identity=20on=20partitioned=20= tables=20without=20ONLY=20should=20get=20a=20notice=0A+ALTER=20TABLE=20= list_parted4=20REPLICA=20IDENTITY=20FULL;=0A+NOTICE:=20=20ALTER=20action=20= REPLICA=20IDENTITY=20on=20relation=20"list_parted4"=20does=20not=20= affect=20present=20partitions=0A+HINT:=20=20Partitions=20may=20be=20= modified=20individually,=20or=20specify=20ONLY=20to=20suppress=20this=20= message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20REPLICA=20IDENTITY=20= FULL;=0A+ALTER=20TABLE=20list_parted4=20REPLICA=20IDENTITY=20NOTHING;=0A= +NOTICE:=20=20ALTER=20action=20REPLICA=20IDENTITY=20on=20relation=20= "list_parted4"=20does=20not=20affect=20present=20partitions=0A+HINT:=20=20= Partitions=20may=20be=20modified=20individually,=20or=20specify=20ONLY=20= to=20suppress=20this=20message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20= REPLICA=20IDENTITY=20NOTHING;=0A+--=20set=20compression=20on=20= partitioned=20tables=20without=20ONLY=20should=20get=20a=20notice=0A= +ALTER=20TABLE=20list_parted4=20ALTER=20COLUMN=20b=20SET=20COMPRESSION=20= pglz;=0A+NOTICE:=20=20ALTER=20action=20ALTER=20COLUMN=20...=20SET=20= COMPRESSION=20on=20relation=20"list_parted4"=20does=20not=20affect=20= present=20partitions=0A+HINT:=20=20Partitions=20may=20be=20modified=20= individually,=20or=20specify=20ONLY=20to=20suppress=20this=20message.=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20ALTER=20COLUMN=20b=20SET=20= COMPRESSION=20pglz;=0A+--=20set=20owner=20on=20partitioned=20tables=20= without=20ONLY=20should=20get=20a=20notice=0A+ALTER=20TABLE=20= list_parted4=20OWNER=20TO=20regress_alter_table_user1;=0A+NOTICE:=20=20= ALTER=20action=20OWNER=20TO=20on=20relation=20"list_parted4"=20does=20= not=20affect=20present=20partitions=0A+HINT:=20=20Partitions=20may=20be=20= modified=20individually,=20or=20specify=20ONLY=20to=20suppress=20this=20= message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20OWNER=20TO=20= regress_alter_table_user1;=0A+--=20set=20access=20method=20on=20= partitioned=20tables=20without=20ONLY=20should=20get=20a=20notice=0A= +ALTER=20TABLE=20list_parted4=20SET=20ACCESS=20METHOD=20heap;=0A+NOTICE:=20= =20ALTER=20action=20SET=20ACCESS=20METHOD=20on=20relation=20= "list_parted4"=20does=20not=20affect=20present=20partitions=0A+HINT:=20=20= Partitions=20may=20be=20modified=20individually,=20or=20specify=20ONLY=20= to=20suppress=20this=20message.=0A+ALTER=20TABLE=20ONLY=20list_parted4=20= SET=20ACCESS=20METHOD=20heap;=0A+--=20set=20schema=20on=20partitioned=20= tables=20without=20ONLY=20should=20get=20a=20notice=0A+CREATE=20SCHEMA=20= alter_table_test_schema;=0A+ALTER=20TABLE=20list_parted4=20SET=20SCHEMA=20= alter_table_test_schema;=0A+NOTICE:=20=20ALTER=20action=20SET=20SCHEMA=20= on=20relation=20"list_parted4"=20does=20not=20affect=20present=20= partitions=0A+HINT:=20=20Partitions=20may=20be=20modified=20= individually,=20or=20specify=20ONLY=20to=20suppress=20this=20message.=0A= +ALTER=20TABLE=20ONLY=20alter_table_test_schema.list_parted4=20SET=20= SCHEMA=20public;=0A+DROP=20SCHEMA=20alter_table_test_schema=20CASCADE;=0A= +--=20when=20there=20are=20multiple=20sub-command,=20notice=20should=20= not=20duplicated=0A+ALTER=20TABLE=20list_parted4=0A+=20=20ALTER=20COLUMN=20= b=20SET=20COMPRESSION=20pglz,=0A+=20=20ALTER=20COLUMN=20b=20SET=20= COMPRESSION=20pglz,=20--=20duplicate,=20but=20should=20not=20get=20= duplicate=20notice=0A+=20=20FORCE=20ROW=20LEVEL=20SECURITY,=0A+=20=20= REPLICA=20IDENTITY=20FULL,=0A+=20=20OWNER=20TO=20= regress_alter_table_user1;=0A+NOTICE:=20=20ALTER=20action=20ALTER=20= COLUMN=20...=20SET=20COMPRESSION=20on=20relation=20"list_parted4"=20does=20= not=20affect=20present=20partitions=0A+NOTICE:=20=20ALTER=20action=20= FORCE=20ROW=20SECURITY=20on=20relation=20"list_parted4"=20does=20not=20= affect=20present=20partitions=0A+NOTICE:=20=20ALTER=20action=20REPLICA=20= IDENTITY=20on=20relation=20"list_parted4"=20does=20not=20affect=20= present=20partitions=0A+NOTICE:=20=20ALTER=20action=20OWNER=20TO=20on=20= relation=20"list_parted4"=20does=20not=20affect=20present=20partitions=0A= +HINT:=20=20Partitions=20may=20be=20modified=20individually,=20or=20= specify=20ONLY=20to=20suppress=20this=20message.=0A+--=20when=20the=20= sub-command=20fails,=20notice=20should=20not=20be=20printed=0A+ALTER=20= TABLE=20list_parted4=20SET=20ACCESS=20METHOD=20invalid_am;=0A+ERROR:=20=20= access=20method=20"invalid_am"=20does=20not=20exist=0A+--=20list_parted5=20= is=20a=20partitioned=20table=20that=20has=20no=20partition.=0A+CREATE=20= TABLE=20list_parted5=20(a=20int,=20b=20text)=20PARTITION=20BY=20LIST=20= (a);=0A+--=20as=20it=20has=20no=20partition,=20there=20should=20be=20no=20= notice=20when=20altering=20it=20without=20ONLY=0A+ALTER=20TABLE=20= list_parted5=20FORCE=20ROW=20LEVEL=20SECURITY;=0A=20--=20cleanup=0A-DROP=20= TABLE=20list_parted,=20list_parted2,=20range_parted,=20list_parted3;=0A= +DROP=20TABLE=20list_parted,=20list_parted2,=20range_parted,=20= list_parted3,=20list_parted4,=20list_parted5;=0A=20DROP=20TABLE=20= fail_def_part;=0A=20DROP=20TABLE=20hash_parted;=0A=20--=20more=20tests=20= for=20certain=20multi-level=20partitioning=20scenarios=0Adiff=20--git=20= a/src/test/regress/expected/cluster.out=20= b/src/test/regress/expected/cluster.out=0Aindex=20= 269f163efa6..b422b42eb2d=20100644=0A---=20= a/src/test/regress/expected/cluster.out=0A+++=20= b/src/test/regress/expected/cluster.out=0A@@=20-549,7=20+549,7=20@@=20= SET=20SESSION=20AUTHORIZATION=20regress_ptnowner;=0A=20CLUSTER=20= ptnowner=20USING=20ptnowner_i_idx;=0A=20ERROR:=20=20permission=20denied=20= for=20table=20ptnowner=0A=20RESET=20SESSION=20AUTHORIZATION;=0A-ALTER=20= TABLE=20ptnowner=20OWNER=20TO=20regress_ptnowner;=0A+ALTER=20TABLE=20= ONLY=20ptnowner=20OWNER=20TO=20regress_ptnowner;=0A=20CREATE=20TEMP=20= TABLE=20ptnowner_oldnodes=20AS=0A=20=20=20SELECT=20oid,=20relname,=20= relfilenode=20FROM=20pg_partition_tree('ptnowner')=20AS=20tree=0A=20=20=20= JOIN=20pg_class=20AS=20c=20ON=20c.oid=3Dtree.relid;=0Adiff=20--git=20= a/src/test/regress/expected/create_am.out=20= b/src/test/regress/expected/create_am.out=0Aindex=20= c1a95157251..8c428270118=20100644=0A---=20= a/src/test/regress/expected/create_am.out=0A+++=20= b/src/test/regress/expected/create_am.out=0A@@=20-380,7=20+380,7=20@@=20= SELECT=20pg_describe_object(classid,=20objid,=20objsubid)=20AS=20obj,=0A=20= (0=20rows)=0A=20=0A=20--=20New=20default=20is=20set,=20with=20dependency=20= added.=0A-ALTER=20TABLE=20am_partitioned=20SET=20ACCESS=20METHOD=20= heap2;=0A+ALTER=20TABLE=20ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20= heap2;=0A=20SELECT=20a.amname=20FROM=20pg_class=20c,=20pg_am=20a=0A=20=20= =20WHERE=20c.relname=20=3D=20'am_partitioned'=20AND=20a.oid=20=3D=20= c.relam;=0A=20=20amname=20=0A@@=20-401,7=20+401,7=20@@=20SELECT=20= pg_describe_object(classid,=20objid,=20objsubid)=20AS=20obj,=0A=20=0A=20= --=20Default=20is=20set,=20with=20dependency=20updated.=0A=20SET=20LOCAL=20= default_table_access_method=20=3D=20'heap2';=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap;=0A=20SELECT=20a.amname=20= FROM=20pg_class=20c,=20pg_am=20a=0A=20=20=20WHERE=20c.relname=20=3D=20= 'am_partitioned'=20AND=20a.oid=20=3D=20c.relam;=0A=20=20amname=20=0A@@=20= -422,7=20+422,7=20@@=20SELECT=20pg_describe_object(classid,=20objid,=20= objsubid)=20AS=20obj,=0A=20=0A=20--=20Default=20and=20AM=20set=20in=20= the=20clause=20are=20the=20same,=20relam=20should=20be=20set.=0A=20SET=20= LOCAL=20default_table_access_method=20=3D=20'heap2';=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20SELECT=20a.amname=20= FROM=20pg_class=20c,=20pg_am=20a=0A=20=20=20WHERE=20c.relname=20=3D=20= 'am_partitioned'=20AND=20a.oid=20=3D=20c.relam;=0A=20=20amname=20=0A@@=20= -431,7=20+431,7=20@@=20SELECT=20a.amname=20FROM=20pg_class=20c,=20pg_am=20= a=0A=20(1=20row)=0A=20=0A=20--=20Reset=20to=20default=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A+ALTER=20TABLE=20= ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A=20SELECT=20= relam=20FROM=20pg_class=20WHERE=20relname=20=3D=20'am_partitioned';=0A=20= =20relam=20=0A=20-------=0A@@=20-453,10=20+453,10=20@@=20SET=20LOCAL=20= default_table_access_method=20=3D=20'heap2';=0A=20CREATE=20TABLE=20= am_partitioned_1=20PARTITION=20OF=20am_partitioned=0A=20=20=20FOR=20= VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=201);=0A=20SET=20LOCAL=20= default_table_access_method=20=3D=20'heap';=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20CREATE=20TABLE=20= am_partitioned_2=20PARTITION=20OF=20am_partitioned=0A=20=20=20FOR=20= VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=202);=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A+ALTER=20TABLE=20= ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A=20SELECT=20= relam=20FROM=20pg_class=20WHERE=20relname=20=3D=20'am_partitioned';=0A=20= =20relam=20=0A=20-------=0A@@=20-466,7=20+466,7=20@@=20SELECT=20relam=20= FROM=20pg_class=20WHERE=20relname=20=3D=20'am_partitioned';=0A=20CREATE=20= TABLE=20am_partitioned_3=20PARTITION=20OF=20am_partitioned=0A=20=20=20= FOR=20VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=203);=0A=20--=20= Partitioned=20table=20with=20relam=20at=200=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A+ALTER=20TABLE=20= ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A=20CREATE=20= TABLE=20am_partitioned_5p=20PARTITION=20OF=20am_partitioned=0A=20=20=20= FOR=20VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=205)=20PARTITION=20BY=20= hash(y);=0A=20--=20Partitions=20of=20this=20partitioned=20table=20= inherit=20default=20AM=20at=20creation=0A@@=20-474,7=20+474,7=20@@=20= CREATE=20TABLE=20am_partitioned_5p=20PARTITION=20OF=20am_partitioned=0A=20= CREATE=20TABLE=20am_partitioned_5p1=20PARTITION=20OF=20am_partitioned_5p=0A= =20=20=20FOR=20VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=201);=0A=20--=20= Partitioned=20table=20with=20relam=20set.=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20CREATE=20TABLE=20= am_partitioned_6p=20PARTITION=20OF=20am_partitioned=0A=20=20=20FOR=20= VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=206)=20PARTITION=20BY=20= hash(y);=0A=20--=20Partitions=20of=20this=20partitioned=20table=20= inherit=20its=20AM.=0Adiff=20--git=20= a/src/test/regress/expected/graph_table_rls.out=20= b/src/test/regress/expected/graph_table_rls.out=0Aindex=20= 0e719c7ebd7..c71e2a13796=20100644=0A---=20= a/src/test/regress/expected/graph_table_rls.out=0A+++=20= b/src/test/regress/expected/graph_table_rls.out=0A@@=20-249,7=20+249,7=20= @@=20INSERT=20INTO=20accessed=20VALUES=0A=20--=20Enable=20RLS=20and=20= move=20policies=20p1=20and=20p2=20to=20parent=20table=20but=20leave=20p3=20= and=20p4=20on=0A=20--=20child=20table.=20The=20policies=20on=20child=20= table=20are=20not=20applied=20when=20querying=20parent=0A=20--=20table.=0A= -ALTER=20TABLE=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20= TABLE=20ONLY=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20DROP=20= POLICY=20p1=20ON=20document_people;=0A=20DROP=20POLICY=20p2=20ON=20= document_people;=0A=20CREATE=20POLICY=20p1=20ON=20document=20AS=20= PERMISSIVE=0A@@=20-445,7=20+445,7=20@@=20GRANT=20SELECT=20ON=20document=20= TO=20public;=0A=20ALTER=20TABLE=20document=20ATTACH=20PARTITION=20= document_people=20FOR=20VALUES=20IN=20('People');=0A=20ALTER=20TABLE=20= document=20ATTACH=20PARTITION=20document_places=20FOR=20VALUES=20IN=20= ('Places');=0A=20--=20Enable=20RLS=20on=20partitioned=20table=0A-ALTER=20= TABLE=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20= ONLY=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20--=20create=20= policies=20on=20partitioned=20table=0A=20CREATE=20POLICY=20p1=20ON=20= document=20AS=20PERMISSIVE=0A=20=20=20=20=20USING=20(dlevel=20<=3D=20= (SELECT=20seclv=20FROM=20users=20WHERE=20pguser=20=3D=20current_user));=0A= @@=20-759,7=20+759,7=20@@=20NOTICE:=20=20f_leak=20=3D>=20New=20York=0A=20= (12=20rows)=0A=20=0A=20--=20FORCE=20ROW=20LEVEL=20SECURITY=20applies=20= RLS=20to=20owners=20too=0A-ALTER=20TABLE=20document=20FORCE=20ROW=20= LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20document=20FORCE=20ROW=20= LEVEL=20SECURITY;=0A=20EXECUTE=20graph_rls_query;=0A=20=20pguser=20|=20= aid=20|=20dtitle=20|=20dlevel=20=0A=20--------+-----+--------+--------=0A= diff=20--git=20a/src/test/regress/expected/merge.out=20= b/src/test/regress/expected/merge.out=0Aindex=209cb1d87066a..bd6aac72336=20= 100644=0A---=20a/src/test/regress/expected/merge.out=0A+++=20= b/src/test/regress/expected/merge.out=0A@@=20-2298,8=20+2298,8=20@@=20= SELECT=20*=20FROM=20pa_target=20ORDER=20BY=20tid,=20val;=0A=20ROLLBACK;=0A= =20--=20test=20RLS=20enforcement=0A=20BEGIN;=0A-ALTER=20TABLE=20= pa_target=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A-ALTER=20TABLE=20= pa_target=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= pa_target=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= pa_target=20FORCE=20ROW=20LEVEL=20SECURITY;=0A=20CREATE=20POLICY=20= pa_target_pol=20ON=20pa_target=20USING=20(tid=20!=3D=200);=0A=20MERGE=20= INTO=20pa_target=20t=0A=20=20=20USING=20pa_source=20s=0Adiff=20--git=20= a/src/test/regress/expected/partition_merge.out=20= b/src/test/regress/expected/partition_merge.out=0Aindex=20= 925fe4f570a..f629fc7f3e5=20100644=0A---=20= a/src/test/regress/expected/partition_merge.out=0A+++=20= b/src/test/regress/expected/partition_merge.out=0A@@=20-810,7=20+810,7=20= @@=20SET=20SESSION=20AUTHORIZATION=20regress_partition_merge_bob;=0A=20= ALTER=20TABLE=20t=20MERGE=20PARTITIONS=20(tp_0_1,=20tp_1_2)=20INTO=20= tp_0_2;=0A=20ERROR:=20=20must=20be=20owner=20of=20table=20t=0A=20RESET=20= SESSION=20AUTHORIZATION;=0A-ALTER=20TABLE=20t=20OWNER=20TO=20= regress_partition_merge_bob;=0A+ALTER=20TABLE=20ONLY=20t=20OWNER=20TO=20= regress_partition_merge_bob;=0A=20SET=20SESSION=20AUTHORIZATION=20= regress_partition_merge_bob;=0A=20--=20ERROR:=20=20must=20be=20owner=20= of=20table=20tp_0_1=0A=20ALTER=20TABLE=20t=20MERGE=20PARTITIONS=20= (tp_0_1,=20tp_1_2)=20INTO=20tp_0_2;=0Adiff=20--git=20= a/src/test/regress/expected/partition_split.out=20= b/src/test/regress/expected/partition_split.out=0Aindex=20= 13ca733f9fa..90090cd7305=20100644=0A---=20= a/src/test/regress/expected/partition_split.out=0A+++=20= b/src/test/regress/expected/partition_split.out=0A@@=20-1375,7=20+1375,7=20= @@=20ALTER=20TABLE=20t=20SPLIT=20PARTITION=20tp_0_2=20INTO=0A=20=20=20=20= PARTITION=20tp_1_2=20FOR=20VALUES=20FROM=20(1)=20TO=20(2));=20--error=0A=20= ERROR:=20=20must=20be=20owner=20of=20table=20t=0A=20RESET=20SESSION=20= AUTHORIZATION;=0A-ALTER=20TABLE=20t=20OWNER=20TO=20= regress_partition_split_bob;=0A+ALTER=20TABLE=20ONLY=20t=20OWNER=20TO=20= regress_partition_split_bob;=0A=20SET=20SESSION=20AUTHORIZATION=20= regress_partition_split_bob;=0A=20ALTER=20TABLE=20t=20SPLIT=20PARTITION=20= tp_0_2=20INTO=0A=20=20=20(PARTITION=20tp_0_1=20FOR=20VALUES=20FROM=20(0)=20= TO=20(1),=0Adiff=20--git=20a/src/test/regress/expected/privileges.out=20= b/src/test/regress/expected/privileges.out=0Aindex=20= 7069e9febb8..35c1d0e49c8=20100644=0A---=20= a/src/test/regress/expected/privileges.out=0A+++=20= b/src/test/regress/expected/privileges.out=0A@@=20-1908,7=20+1908,7=20@@=20= SELECT=20brin_summarize_range('sro_brin',=200);=0A=20DROP=20TABLE=20= sro_tab;=0A=20--=20Check=20with=20a=20partitioned=20table=0A=20CREATE=20= TABLE=20sro_ptab=20(a=20int)=20PARTITION=20BY=20RANGE=20(a);=0A-ALTER=20= TABLE=20sro_ptab=20OWNER=20TO=20regress_sro_user;=0A+ALTER=20TABLE=20= ONLY=20sro_ptab=20OWNER=20TO=20regress_sro_user;=0A=20CREATE=20TABLE=20= sro_part=20PARTITION=20OF=20sro_ptab=20FOR=20VALUES=20FROM=20(1)=20TO=20= (10);=0A=20ALTER=20TABLE=20sro_part=20OWNER=20TO=20regress_sro_user;=0A=20= INSERT=20INTO=20sro_ptab=20VALUES=20(1),=20(2),=20(3);=0Adiff=20--git=20= a/src/test/regress/expected/rowsecurity.out=20= b/src/test/regress/expected/rowsecurity.out=0Aindex=20= 3a5e82c35bd..c75074b219b=20100644=0A---=20= a/src/test/regress/expected/rowsecurity.out=0A+++=20= b/src/test/regress/expected/rowsecurity.out=0A@@=20-1233,7=20+1233,7=20= @@=20INSERT=20INTO=20part_document=20VALUES=0A=20=20=20=20=20(=208,=20= 55,=202,=20'regress_rls_carol',=20'great=20satire'),=0A=20=20=20=20=20(=20= 9,=2011,=201,=20'regress_rls_dave',=20'awesome=20science=20fiction'),=0A=20= =20=20=20=20(10,=2099,=202,=20'regress_rls_dave',=20'awesome=20= technology=20book');=0A-ALTER=20TABLE=20part_document=20ENABLE=20ROW=20= LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20part_document=20ENABLE=20ROW=20= LEVEL=20SECURITY;=0A=20--=20Create=20policy=20on=20parent=0A=20--=20= user's=20security=20level=20must=20be=20higher=20than=20or=20equal=20to=20= document's=0A=20CREATE=20POLICY=20pp1=20ON=20part_document=20AS=20= PERMISSIVE=0A@@=20-4915,7=20+4915,7=20@@=20CREATE=20TABLE=20rls_ptbl=20= (a=20int)=20PARTITION=20BY=20RANGE=20(a);=0A=20CREATE=20TABLE=20rls_part=20= PARTITION=20OF=20rls_ptbl=20FOR=20VALUES=20FROM=20(-100)=20TO=20(100);=0A= =20INSERT=20INTO=20rls_ptbl=20SELECT=20x/10=20FROM=20generate_series(1,=20= 100)=20x;=0A=20ANALYZE=20rls_ptbl,=20rls_part;=0A-ALTER=20TABLE=20= rls_ptbl=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= rls_ptbl=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20ALTER=20TABLE=20= rls_part=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20GRANT=20SELECT=20ON=20= rls_ptbl=20TO=20regress_rls_alice;=0A=20GRANT=20SELECT=20ON=20rls_part=20= TO=20regress_rls_alice;=0Adiff=20--git=20= a/src/test/regress/expected/tablespace.out=20= b/src/test/regress/expected/tablespace.out=0Aindex=20= f0dd25cdf0c..3d9c44ba64f=20100644=0A---=20= a/src/test/regress/expected/tablespace.out=0A+++=20= b/src/test/regress/expected/tablespace.out=0A@@=20-290,13=20+290,13=20@@=20= CREATE=20TABLE=20testschema.part_2=20PARTITION=20OF=20testschema.part=20= FOR=20VALUES=20IN=20(2);=0A=20SET=20default_tablespace=20TO=20pg_global;=0A= =20CREATE=20TABLE=20testschema.part_3=20PARTITION=20OF=20testschema.part=20= FOR=20VALUES=20IN=20(3);=0A=20ERROR:=20=20only=20shared=20relations=20= can=20be=20placed=20in=20pg_global=20tablespace=0A-ALTER=20TABLE=20= testschema.part=20SET=20TABLESPACE=20regress_tblspace;=0A+ALTER=20TABLE=20= ONLY=20testschema.part=20SET=20TABLESPACE=20regress_tblspace;=0A=20= CREATE=20TABLE=20testschema.part_3=20PARTITION=20OF=20testschema.part=20= FOR=20VALUES=20IN=20(3);=0A=20CREATE=20TABLE=20testschema.part_4=20= PARTITION=20OF=20testschema.part=20FOR=20VALUES=20IN=20(4)=0A=20=20=20= TABLESPACE=20pg_default;=0A=20CREATE=20TABLE=20testschema.part_56=20= PARTITION=20OF=20testschema.part=20FOR=20VALUES=20IN=20(5,=206)=0A=20=20=20= PARTITION=20BY=20LIST=20(a);=0A-ALTER=20TABLE=20testschema.part=20SET=20= TABLESPACE=20pg_default;=0A+ALTER=20TABLE=20ONLY=20testschema.part=20SET=20= TABLESPACE=20pg_default;=0A=20CREATE=20TABLE=20testschema.part_78=20= PARTITION=20OF=20testschema.part=20FOR=20VALUES=20IN=20(7,=208)=0A=20=20=20= PARTITION=20BY=20LIST=20(a);=0A=20ERROR:=20=20only=20shared=20relations=20= can=20be=20placed=20in=20pg_global=20tablespace=0Adiff=20--git=20= a/src/test/regress/expected/update.out=20= b/src/test/regress/expected/update.out=0Aindex=20= eef2bac1cbf..584b40598eb=20100644=0A---=20= a/src/test/regress/expected/update.out=0A+++=20= b/src/test/regress/expected/update.out=0A@@=20-607,7=20+607,7=20@@=20= DROP=20TRIGGER=20trig_d15_20=20ON=20part_d_15_20;=0A=20DROP=20FUNCTION=20= func_parted_mod_b();=0A=20--=20RLS=20policies=20with=20= update-row-movement=0A=20-----------------------------------------=0A= -ALTER=20TABLE=20range_parted=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A= +ALTER=20TABLE=20ONLY=20range_parted=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A= =20CREATE=20USER=20regress_range_parted_user;=0A=20GRANT=20ALL=20ON=20= range_parted,=20mintab=20TO=20regress_range_parted_user;=0A=20CREATE=20= POLICY=20seeall=20ON=20range_parted=20AS=20PERMISSIVE=20FOR=20SELECT=20= USING=20(true);=0Adiff=20--git=20a/src/test/regress/expected/vacuum.out=20= b/src/test/regress/expected/vacuum.out=0Aindex=20= d4696bc3325..f22bb2127e1=20100644=0A---=20= a/src/test/regress/expected/vacuum.out=0A+++=20= b/src/test/regress/expected/vacuum.out=0A@@=20-614,7=20+614,7=20@@=20= VACUUM=20(ANALYZE)=20vacowned_part2;=0A=20WARNING:=20=20permission=20= denied=20to=20vacuum=20"vacowned_part2",=20skipping=20it=0A=20RESET=20= ROLE;=0A=20--=20Partitioned=20table=20and=20one=20partition=20owned=20by=20= other=20user.=0A-ALTER=20TABLE=20vacowned_parted=20OWNER=20TO=20= regress_vacuum;=0A+ALTER=20TABLE=20ONLY=20vacowned_parted=20OWNER=20TO=20= regress_vacuum;=0A=20ALTER=20TABLE=20vacowned_part1=20OWNER=20TO=20= regress_vacuum;=0A=20SET=20ROLE=20regress_vacuum;=0A=20VACUUM=20= vacowned_parted;=0A@@=20-634,7=20+634,7=20@@=20VACUUM=20(ANALYZE)=20= vacowned_part2;=0A=20WARNING:=20=20permission=20denied=20to=20vacuum=20= "vacowned_part2",=20skipping=20it=0A=20RESET=20ROLE;=0A=20--=20Only=20= one=20partition=20owned=20by=20other=20user.=0A-ALTER=20TABLE=20= vacowned_parted=20OWNER=20TO=20CURRENT_USER;=0A+ALTER=20TABLE=20ONLY=20= vacowned_parted=20OWNER=20TO=20CURRENT_USER;=0A=20SET=20ROLE=20= regress_vacuum;=0A=20VACUUM=20vacowned_parted;=0A=20WARNING:=20=20= permission=20denied=20to=20vacuum=20"vacowned_parted",=20skipping=20it=0A= @@=20-656,7=20+656,7=20@@=20VACUUM=20(ANALYZE)=20vacowned_part2;=0A=20= WARNING:=20=20permission=20denied=20to=20vacuum=20"vacowned_part2",=20= skipping=20it=0A=20RESET=20ROLE;=0A=20--=20Only=20partitioned=20table=20= owned=20by=20other=20user.=0A-ALTER=20TABLE=20vacowned_parted=20OWNER=20= TO=20regress_vacuum;=0A+ALTER=20TABLE=20ONLY=20vacowned_parted=20OWNER=20= TO=20regress_vacuum;=0A=20ALTER=20TABLE=20vacowned_part1=20OWNER=20TO=20= CURRENT_USER;=0A=20SET=20ROLE=20regress_vacuum;=0A=20VACUUM=20= vacowned_parted;=0Adiff=20--git=20a/src/test/regress/sql/alter_table.sql=20= b/src/test/regress/sql/alter_table.sql=0Aindex=20= f5f13bbd3e7..494d5d1511f=20100644=0A---=20= a/src/test/regress/sql/alter_table.sql=0A+++=20= b/src/test/regress/sql/alter_table.sql=0A@@=20-2912,8=20+2912,77=20@@=20= ALTER=20TABLE=20list_parted2=20ALTER=20COLUMN=20b=20TYPE=20text;=0A=20= ALTER=20TABLE=20list_parted=20DROP=20COLUMN=20b;=0A=20SELECT=20*=20FROM=20= list_parted;=0A=20=0A+CREATE=20TABLE=20list_parted4=20(a=20int,=20b=20= text)=20PARTITION=20BY=20LIST=20(a);=0A+CREATE=20TABLE=20list_parted4_1=20= PARTITION=20OF=20list_parted4=20FOR=20VALUES=20IN=20(1);=0A+=0A+--=20set=20= column=20attribute=20on=20partitioned=20table=20without=20ONLY=20should=20= get=20a=20notice=0A+ALTER=20TABLE=20list_parted4=20ALTER=20COLUMN=20b=20= SET=20(n_distinct=20=3D=200.2);=0A+ALTER=20TABLE=20list_parted4=20ALTER=20= COLUMN=20b=20RESET=20(n_distinct);=0A+ALTER=20TABLE=20ONLY=20= list_parted4=20ALTER=20COLUMN=20b=20SET=20(n_distinct=20=3D=200.2);=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20ALTER=20COLUMN=20b=20RESET=20= (n_distinct);=0A+=0A+--=20enable/disable=20rules=20on=20partitioned=20= tables=20without=20ONLY=20should=20get=20a=20notice=0A+CREATE=20RULE=20= list_parted4_rule=20AS=20ON=20INSERT=20TO=20list_parted4=20DO=20INSTEAD=20= NOTHING;=0A+ALTER=20TABLE=20list_parted4=20DISABLE=20RULE=20= list_parted4_rule;=0A+ALTER=20TABLE=20ONLY=20list_parted4=20DISABLE=20= RULE=20list_parted4_rule;=0A+ALTER=20TABLE=20list_parted4=20ENABLE=20= RULE=20list_parted4_rule;=0A+ALTER=20TABLE=20ONLY=20list_parted4=20= ENABLE=20RULE=20list_parted4_rule;=0A+DROP=20RULE=20list_parted4_rule=20= ON=20list_parted4;=0A+=0A+--=20enable/disable=20row=20level=20security=20= on=20partitioned=20tables=20without=20ONLY=20should=20get=20a=20notice=0A= +ALTER=20TABLE=20list_parted4=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A= +ALTER=20TABLE=20list_parted4=20DISABLE=20ROW=20LEVEL=20SECURITY;=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20DISABLE=20ROW=20LEVEL=20SECURITY;=0A= +=0A+--=20force/no=20force=20row=20level=20security=20on=20partitioned=20= tables=20without=20ONLY=20should=20get=20a=20notice=0A+ALTER=20TABLE=20= list_parted4=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= list_parted4=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20= list_parted4=20NO=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20= ONLY=20list_parted4=20NO=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+=0A+--=20= set=20replica=20identity=20on=20partitioned=20tables=20without=20ONLY=20= should=20get=20a=20notice=0A+ALTER=20TABLE=20list_parted4=20REPLICA=20= IDENTITY=20FULL;=0A+ALTER=20TABLE=20ONLY=20list_parted4=20REPLICA=20= IDENTITY=20FULL;=0A+ALTER=20TABLE=20list_parted4=20REPLICA=20IDENTITY=20= NOTHING;=0A+ALTER=20TABLE=20ONLY=20list_parted4=20REPLICA=20IDENTITY=20= NOTHING;=0A+=0A+--=20set=20compression=20on=20partitioned=20tables=20= without=20ONLY=20should=20get=20a=20notice=0A+ALTER=20TABLE=20= list_parted4=20ALTER=20COLUMN=20b=20SET=20COMPRESSION=20pglz;=0A+ALTER=20= TABLE=20ONLY=20list_parted4=20ALTER=20COLUMN=20b=20SET=20COMPRESSION=20= pglz;=0A+=0A+--=20set=20owner=20on=20partitioned=20tables=20without=20= ONLY=20should=20get=20a=20notice=0A+ALTER=20TABLE=20list_parted4=20OWNER=20= TO=20regress_alter_table_user1;=0A+ALTER=20TABLE=20ONLY=20list_parted4=20= OWNER=20TO=20regress_alter_table_user1;=0A+=0A+--=20set=20access=20= method=20on=20partitioned=20tables=20without=20ONLY=20should=20get=20a=20= notice=0A+ALTER=20TABLE=20list_parted4=20SET=20ACCESS=20METHOD=20heap;=0A= +ALTER=20TABLE=20ONLY=20list_parted4=20SET=20ACCESS=20METHOD=20heap;=0A+=0A= +--=20set=20schema=20on=20partitioned=20tables=20without=20ONLY=20should=20= get=20a=20notice=0A+CREATE=20SCHEMA=20alter_table_test_schema;=0A+ALTER=20= TABLE=20list_parted4=20SET=20SCHEMA=20alter_table_test_schema;=0A+ALTER=20= TABLE=20ONLY=20alter_table_test_schema.list_parted4=20SET=20SCHEMA=20= public;=0A+DROP=20SCHEMA=20alter_table_test_schema=20CASCADE;=0A+=0A+--=20= when=20there=20are=20multiple=20sub-command,=20notice=20should=20not=20= duplicated=0A+ALTER=20TABLE=20list_parted4=0A+=20=20ALTER=20COLUMN=20b=20= SET=20COMPRESSION=20pglz,=0A+=20=20ALTER=20COLUMN=20b=20SET=20= COMPRESSION=20pglz,=20--=20duplicate,=20but=20should=20not=20get=20= duplicate=20notice=0A+=20=20FORCE=20ROW=20LEVEL=20SECURITY,=0A+=20=20= REPLICA=20IDENTITY=20FULL,=0A+=20=20OWNER=20TO=20= regress_alter_table_user1;=0A+=0A+--=20when=20the=20sub-command=20fails,=20= notice=20should=20not=20be=20printed=0A+ALTER=20TABLE=20list_parted4=20= SET=20ACCESS=20METHOD=20invalid_am;=0A+=0A+--=20list_parted5=20is=20a=20= partitioned=20table=20that=20has=20no=20partition.=0A+CREATE=20TABLE=20= list_parted5=20(a=20int,=20b=20text)=20PARTITION=20BY=20LIST=20(a);=0A= +--=20as=20it=20has=20no=20partition,=20there=20should=20be=20no=20= notice=20when=20altering=20it=20without=20ONLY=0A+ALTER=20TABLE=20= list_parted5=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+=0A=20--=20cleanup=0A= -DROP=20TABLE=20list_parted,=20list_parted2,=20range_parted,=20= list_parted3;=0A+DROP=20TABLE=20list_parted,=20list_parted2,=20= range_parted,=20list_parted3,=20list_parted4,=20list_parted5;=0A=20DROP=20= TABLE=20fail_def_part;=0A=20DROP=20TABLE=20hash_parted;=0A=20=0Adiff=20= --git=20a/src/test/regress/sql/cluster.sql=20= b/src/test/regress/sql/cluster.sql=0Aindex=20f90c6ec200b..3405e93ab0c=20= 100644=0A---=20a/src/test/regress/sql/cluster.sql=0A+++=20= b/src/test/regress/sql/cluster.sql=0A@@=20-260,7=20+260,7=20@@=20ALTER=20= TABLE=20ptnowner1=20OWNER=20TO=20regress_ptnowner;=0A=20SET=20SESSION=20= AUTHORIZATION=20regress_ptnowner;=0A=20CLUSTER=20ptnowner=20USING=20= ptnowner_i_idx;=0A=20RESET=20SESSION=20AUTHORIZATION;=0A-ALTER=20TABLE=20= ptnowner=20OWNER=20TO=20regress_ptnowner;=0A+ALTER=20TABLE=20ONLY=20= ptnowner=20OWNER=20TO=20regress_ptnowner;=0A=20CREATE=20TEMP=20TABLE=20= ptnowner_oldnodes=20AS=0A=20=20=20SELECT=20oid,=20relname,=20relfilenode=20= FROM=20pg_partition_tree('ptnowner')=20AS=20tree=0A=20=20=20JOIN=20= pg_class=20AS=20c=20ON=20c.oid=3Dtree.relid;=0Adiff=20--git=20= a/src/test/regress/sql/create_am.sql=20= b/src/test/regress/sql/create_am.sql=0Aindex=20754fe0c694b..4953be0ab3d=20= 100644=0A---=20a/src/test/regress/sql/create_am.sql=0A+++=20= b/src/test/regress/sql/create_am.sql=0A@@=20-241,7=20+241,7=20@@=20= SELECT=20pg_describe_object(classid,=20objid,=20objsubid)=20AS=20obj,=0A=20= =20=20=20=20AND=20pg_am.oid=20=3D=20pg_depend.refobjid=0A=20=20=20=20=20= AND=20pg_depend.objid=20=3D=20'am_partitioned'::regclass;=0A=20--=20New=20= default=20is=20set,=20with=20dependency=20added.=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20SELECT=20a.amname=20= FROM=20pg_class=20c,=20pg_am=20a=0A=20=20=20WHERE=20c.relname=20=3D=20= 'am_partitioned'=20AND=20a.oid=20=3D=20c.relam;=0A=20SELECT=20= pg_describe_object(classid,=20objid,=20objsubid)=20AS=20obj,=0A@@=20= -252,7=20+252,7=20@@=20SELECT=20pg_describe_object(classid,=20objid,=20= objsubid)=20AS=20obj,=0A=20=20=20=20=20AND=20pg_depend.objid=20=3D=20= 'am_partitioned'::regclass;=0A=20--=20Default=20is=20set,=20with=20= dependency=20updated.=0A=20SET=20LOCAL=20default_table_access_method=20=3D= =20'heap2';=0A-ALTER=20TABLE=20am_partitioned=20SET=20ACCESS=20METHOD=20= heap;=0A+ALTER=20TABLE=20ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20= heap;=0A=20SELECT=20a.amname=20FROM=20pg_class=20c,=20pg_am=20a=0A=20=20=20= WHERE=20c.relname=20=3D=20'am_partitioned'=20AND=20a.oid=20=3D=20= c.relam;=0A=20--=20Dependency=20pinned,=20hence=20removed.=0A@@=20= -264,11=20+264,11=20@@=20SELECT=20pg_describe_object(classid,=20objid,=20= objsubid)=20AS=20obj,=0A=20=20=20=20=20AND=20pg_depend.objid=20=3D=20= 'am_partitioned'::regclass;=0A=20--=20Default=20and=20AM=20set=20in=20= the=20clause=20are=20the=20same,=20relam=20should=20be=20set.=0A=20SET=20= LOCAL=20default_table_access_method=20=3D=20'heap2';=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20SELECT=20a.amname=20= FROM=20pg_class=20c,=20pg_am=20a=0A=20=20=20WHERE=20c.relname=20=3D=20= 'am_partitioned'=20AND=20a.oid=20=3D=20c.relam;=0A=20--=20Reset=20to=20= default=0A-ALTER=20TABLE=20am_partitioned=20SET=20ACCESS=20METHOD=20= DEFAULT;=0A+ALTER=20TABLE=20ONLY=20am_partitioned=20SET=20ACCESS=20= METHOD=20DEFAULT;=0A=20SELECT=20relam=20FROM=20pg_class=20WHERE=20= relname=20=3D=20'am_partitioned';=0A=20--=20Upon=20ALTER=20TABLE=20SET=20= ACCESS=20METHOD=20on=20a=20partitioned=20table,=20new=20partitions=0A=20= --=20will=20inherit=20the=20AM=20set.=20=20Existing=20partitioned=20are=20= unchanged.=0A@@=20-280,15=20+280,15=20@@=20SET=20LOCAL=20= default_table_access_method=20=3D=20'heap2';=0A=20CREATE=20TABLE=20= am_partitioned_1=20PARTITION=20OF=20am_partitioned=0A=20=20=20FOR=20= VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=201);=0A=20SET=20LOCAL=20= default_table_access_method=20=3D=20'heap';=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20CREATE=20TABLE=20= am_partitioned_2=20PARTITION=20OF=20am_partitioned=0A=20=20=20FOR=20= VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=202);=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A+ALTER=20TABLE=20= ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A=20SELECT=20= relam=20FROM=20pg_class=20WHERE=20relname=20=3D=20'am_partitioned';=0A=20= CREATE=20TABLE=20am_partitioned_3=20PARTITION=20OF=20am_partitioned=0A=20= =20=20FOR=20VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=203);=0A=20--=20= Partitioned=20table=20with=20relam=20at=200=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A+ALTER=20TABLE=20= ONLY=20am_partitioned=20SET=20ACCESS=20METHOD=20DEFAULT;=0A=20CREATE=20= TABLE=20am_partitioned_5p=20PARTITION=20OF=20am_partitioned=0A=20=20=20= FOR=20VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=205)=20PARTITION=20BY=20= hash(y);=0A=20--=20Partitions=20of=20this=20partitioned=20table=20= inherit=20default=20AM=20at=20creation=0A@@=20-296,7=20+296,7=20@@=20= CREATE=20TABLE=20am_partitioned_5p=20PARTITION=20OF=20am_partitioned=0A=20= CREATE=20TABLE=20am_partitioned_5p1=20PARTITION=20OF=20am_partitioned_5p=0A= =20=20=20FOR=20VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=201);=0A=20--=20= Partitioned=20table=20with=20relam=20set.=0A-ALTER=20TABLE=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A+ALTER=20TABLE=20ONLY=20= am_partitioned=20SET=20ACCESS=20METHOD=20heap2;=0A=20CREATE=20TABLE=20= am_partitioned_6p=20PARTITION=20OF=20am_partitioned=0A=20=20=20FOR=20= VALUES=20WITH=20(MODULUS=2010,=20REMAINDER=206)=20PARTITION=20BY=20= hash(y);=0A=20--=20Partitions=20of=20this=20partitioned=20table=20= inherit=20its=20AM.=0Adiff=20--git=20= a/src/test/regress/sql/graph_table_rls.sql=20= b/src/test/regress/sql/graph_table_rls.sql=0Aindex=20= 5837eac402e..a5256170025=20100644=0A---=20= a/src/test/regress/sql/graph_table_rls.sql=0A+++=20= b/src/test/regress/sql/graph_table_rls.sql=0A@@=20-185,7=20+185,7=20@@=20= INSERT=20INTO=20accessed=20VALUES=0A=20--=20Enable=20RLS=20and=20move=20= policies=20p1=20and=20p2=20to=20parent=20table=20but=20leave=20p3=20and=20= p4=20on=0A=20--=20child=20table.=20The=20policies=20on=20child=20table=20= are=20not=20applied=20when=20querying=20parent=0A=20--=20table.=0A-ALTER=20= TABLE=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20= ONLY=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20DROP=20POLICY=20= p1=20ON=20document_people;=0A=20DROP=20POLICY=20p2=20ON=20= document_people;=0A=20CREATE=20POLICY=20p1=20ON=20document=20AS=20= PERMISSIVE=0A@@=20-255,7=20+255,7=20@@=20GRANT=20SELECT=20ON=20document=20= TO=20public;=0A=20ALTER=20TABLE=20document=20ATTACH=20PARTITION=20= document_people=20FOR=20VALUES=20IN=20('People');=0A=20ALTER=20TABLE=20= document=20ATTACH=20PARTITION=20document_places=20FOR=20VALUES=20IN=20= ('Places');=0A=20--=20Enable=20RLS=20on=20partitioned=20table=0A-ALTER=20= TABLE=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20= ONLY=20document=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20--=20create=20= policies=20on=20partitioned=20table=0A=20CREATE=20POLICY=20p1=20ON=20= document=20AS=20PERMISSIVE=0A=20=20=20=20=20USING=20(dlevel=20<=3D=20= (SELECT=20seclv=20FROM=20users=20WHERE=20pguser=20=3D=20current_user));=0A= @@=20-352,7=20+352,7=20@@=20EXECUTE=20graph_rls_query;=0A=20SET=20= SESSION=20AUTHORIZATION=20regress_graph_rls_alice;=0A=20EXECUTE=20= graph_rls_query;=0A=20--=20FORCE=20ROW=20LEVEL=20SECURITY=20applies=20= RLS=20to=20owners=20too=0A-ALTER=20TABLE=20document=20FORCE=20ROW=20= LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20document=20FORCE=20ROW=20= LEVEL=20SECURITY;=0A=20EXECUTE=20graph_rls_query;=0A=20SET=20= row_security=20TO=20OFF;=0A=20EXECUTE=20graph_rls_query;=20--=20error=0A= diff=20--git=20a/src/test/regress/sql/merge.sql=20= b/src/test/regress/sql/merge.sql=0Aindex=202660b19f238..2bffcf7aa98=20= 100644=0A---=20a/src/test/regress/sql/merge.sql=0A+++=20= b/src/test/regress/sql/merge.sql=0A@@=20-1422,8=20+1422,8=20@@=20= ROLLBACK;=0A=20=0A=20--=20test=20RLS=20enforcement=0A=20BEGIN;=0A-ALTER=20= TABLE=20pa_target=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A-ALTER=20TABLE=20= pa_target=20FORCE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= pa_target=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= pa_target=20FORCE=20ROW=20LEVEL=20SECURITY;=0A=20CREATE=20POLICY=20= pa_target_pol=20ON=20pa_target=20USING=20(tid=20!=3D=200);=0A=20MERGE=20= INTO=20pa_target=20t=0A=20=20=20USING=20pa_source=20s=0Adiff=20--git=20= a/src/test/regress/sql/partition_merge.sql=20= b/src/test/regress/sql/partition_merge.sql=0Aindex=20= a211fee2ad1..73bffb530dd=20100644=0A---=20= a/src/test/regress/sql/partition_merge.sql=0A+++=20= b/src/test/regress/sql/partition_merge.sql=0A@@=20-571,7=20+571,7=20@@=20= SET=20SESSION=20AUTHORIZATION=20regress_partition_merge_bob;=0A=20ALTER=20= TABLE=20t=20MERGE=20PARTITIONS=20(tp_0_1,=20tp_1_2)=20INTO=20tp_0_2;=0A=20= RESET=20SESSION=20AUTHORIZATION;=0A=20=0A-ALTER=20TABLE=20t=20OWNER=20TO=20= regress_partition_merge_bob;=0A+ALTER=20TABLE=20ONLY=20t=20OWNER=20TO=20= regress_partition_merge_bob;=0A=20SET=20SESSION=20AUTHORIZATION=20= regress_partition_merge_bob;=0A=20--=20ERROR:=20=20must=20be=20owner=20= of=20table=20tp_0_1=0A=20ALTER=20TABLE=20t=20MERGE=20PARTITIONS=20= (tp_0_1,=20tp_1_2)=20INTO=20tp_0_2;=0Adiff=20--git=20= a/src/test/regress/sql/partition_split.sql=20= b/src/test/regress/sql/partition_split.sql=0Aindex=20= 37c6d730840..f4f9c7886e4=20100644=0A---=20= a/src/test/regress/sql/partition_split.sql=0A+++=20= b/src/test/regress/sql/partition_split.sql=0A@@=20-960,7=20+960,7=20@@=20= ALTER=20TABLE=20t=20SPLIT=20PARTITION=20tp_0_2=20INTO=0A=20=20=20=20= PARTITION=20tp_1_2=20FOR=20VALUES=20FROM=20(1)=20TO=20(2));=20--error=0A=20= RESET=20SESSION=20AUTHORIZATION;=0A=20=0A-ALTER=20TABLE=20t=20OWNER=20TO=20= regress_partition_split_bob;=0A+ALTER=20TABLE=20ONLY=20t=20OWNER=20TO=20= regress_partition_split_bob;=0A=20SET=20SESSION=20AUTHORIZATION=20= regress_partition_split_bob;=0A=20ALTER=20TABLE=20t=20SPLIT=20PARTITION=20= tp_0_2=20INTO=0A=20=20=20(PARTITION=20tp_0_1=20FOR=20VALUES=20FROM=20(0)=20= TO=20(1),=0Adiff=20--git=20a/src/test/regress/sql/privileges.sql=20= b/src/test/regress/sql/privileges.sql=0Aindex=209f21c2945bd..fcb4d18aede=20= 100644=0A---=20a/src/test/regress/sql/privileges.sql=0A+++=20= b/src/test/regress/sql/privileges.sql=0A@@=20-1230,7=20+1230,7=20@@=20= SELECT=20brin_summarize_range('sro_brin',=200);=0A=20DROP=20TABLE=20= sro_tab;=0A=20--=20Check=20with=20a=20partitioned=20table=0A=20CREATE=20= TABLE=20sro_ptab=20(a=20int)=20PARTITION=20BY=20RANGE=20(a);=0A-ALTER=20= TABLE=20sro_ptab=20OWNER=20TO=20regress_sro_user;=0A+ALTER=20TABLE=20= ONLY=20sro_ptab=20OWNER=20TO=20regress_sro_user;=0A=20CREATE=20TABLE=20= sro_part=20PARTITION=20OF=20sro_ptab=20FOR=20VALUES=20FROM=20(1)=20TO=20= (10);=0A=20ALTER=20TABLE=20sro_part=20OWNER=20TO=20regress_sro_user;=0A=20= INSERT=20INTO=20sro_ptab=20VALUES=20(1),=20(2),=20(3);=0Adiff=20--git=20= a/src/test/regress/sql/rowsecurity.sql=20= b/src/test/regress/sql/rowsecurity.sql=0Aindex=20= 6b3566271df..1a2e80dade0=20100644=0A---=20= a/src/test/regress/sql/rowsecurity.sql=0A+++=20= b/src/test/regress/sql/rowsecurity.sql=0A@@=20-499,7=20+499,7=20@@=20= INSERT=20INTO=20part_document=20VALUES=0A=20=20=20=20=20(=209,=2011,=20= 1,=20'regress_rls_dave',=20'awesome=20science=20fiction'),=0A=20=20=20=20= =20(10,=2099,=202,=20'regress_rls_dave',=20'awesome=20technology=20= book');=0A=20=0A-ALTER=20TABLE=20part_document=20ENABLE=20ROW=20LEVEL=20= SECURITY;=0A+ALTER=20TABLE=20ONLY=20part_document=20ENABLE=20ROW=20LEVEL=20= SECURITY;=0A=20=0A=20--=20Create=20policy=20on=20parent=0A=20--=20user's=20= security=20level=20must=20be=20higher=20than=20or=20equal=20to=20= document's=0A@@=20-2414,7=20+2414,7=20@@=20CREATE=20TABLE=20rls_part=20= PARTITION=20OF=20rls_ptbl=20FOR=20VALUES=20FROM=20(-100)=20TO=20(100);=0A= =20INSERT=20INTO=20rls_ptbl=20SELECT=20x/10=20FROM=20generate_series(1,=20= 100)=20x;=0A=20ANALYZE=20rls_ptbl,=20rls_part;=0A=20=0A-ALTER=20TABLE=20= rls_ptbl=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A+ALTER=20TABLE=20ONLY=20= rls_ptbl=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20ALTER=20TABLE=20= rls_part=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A=20GRANT=20SELECT=20ON=20= rls_ptbl=20TO=20regress_rls_alice;=0A=20GRANT=20SELECT=20ON=20rls_part=20= TO=20regress_rls_alice;=0Adiff=20--git=20= a/src/test/regress/sql/tablespace.sql=20= b/src/test/regress/sql/tablespace.sql=0Aindex=20c43a59e5957..8eff2914a5b=20= 100644=0A---=20a/src/test/regress/sql/tablespace.sql=0A+++=20= b/src/test/regress/sql/tablespace.sql=0A@@=20-195,13=20+195,13=20@@=20= SET=20default_tablespace=20TO=20regress_tblspace;=0A=20CREATE=20TABLE=20= testschema.part_2=20PARTITION=20OF=20testschema.part=20FOR=20VALUES=20IN=20= (2);=0A=20SET=20default_tablespace=20TO=20pg_global;=0A=20CREATE=20TABLE=20= testschema.part_3=20PARTITION=20OF=20testschema.part=20FOR=20VALUES=20IN=20= (3);=0A-ALTER=20TABLE=20testschema.part=20SET=20TABLESPACE=20= regress_tblspace;=0A+ALTER=20TABLE=20ONLY=20testschema.part=20SET=20= TABLESPACE=20regress_tblspace;=0A=20CREATE=20TABLE=20testschema.part_3=20= PARTITION=20OF=20testschema.part=20FOR=20VALUES=20IN=20(3);=0A=20CREATE=20= TABLE=20testschema.part_4=20PARTITION=20OF=20testschema.part=20FOR=20= VALUES=20IN=20(4)=0A=20=20=20TABLESPACE=20pg_default;=0A=20CREATE=20= TABLE=20testschema.part_56=20PARTITION=20OF=20testschema.part=20FOR=20= VALUES=20IN=20(5,=206)=0A=20=20=20PARTITION=20BY=20LIST=20(a);=0A-ALTER=20= TABLE=20testschema.part=20SET=20TABLESPACE=20pg_default;=0A+ALTER=20= TABLE=20ONLY=20testschema.part=20SET=20TABLESPACE=20pg_default;=0A=20= CREATE=20TABLE=20testschema.part_78=20PARTITION=20OF=20testschema.part=20= FOR=20VALUES=20IN=20(7,=208)=0A=20=20=20PARTITION=20BY=20LIST=20(a);=0A=20= CREATE=20TABLE=20testschema.part_910=20PARTITION=20OF=20testschema.part=20= FOR=20VALUES=20IN=20(9,=2010)=0Adiff=20--git=20= a/src/test/regress/sql/update.sql=20b/src/test/regress/sql/update.sql=0A= index=208b4707eb9c3..56b1edb00ce=20100644=0A---=20= a/src/test/regress/sql/update.sql=0A+++=20= b/src/test/regress/sql/update.sql=0A@@=20-341,7=20+341,7=20@@=20DROP=20= FUNCTION=20func_parted_mod_b();=0A=20--=20RLS=20policies=20with=20= update-row-movement=0A=20-----------------------------------------=0A=20=0A= -ALTER=20TABLE=20range_parted=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A= +ALTER=20TABLE=20ONLY=20range_parted=20ENABLE=20ROW=20LEVEL=20SECURITY;=0A= =20CREATE=20USER=20regress_range_parted_user;=0A=20GRANT=20ALL=20ON=20= range_parted,=20mintab=20TO=20regress_range_parted_user;=0A=20CREATE=20= POLICY=20seeall=20ON=20range_parted=20AS=20PERMISSIVE=20FOR=20SELECT=20= USING=20(true);=0Adiff=20--git=20a/src/test/regress/sql/vacuum.sql=20= b/src/test/regress/sql/vacuum.sql=0Aindex=20247b8e23b23..acff5824ebb=20= 100644=0A---=20a/src/test/regress/sql/vacuum.sql=0A+++=20= b/src/test/regress/sql/vacuum.sql=0A@@=20-452,7=20+452,7=20@@=20VACUUM=20= (ANALYZE)=20vacowned_part1;=0A=20VACUUM=20(ANALYZE)=20vacowned_part2;=0A=20= RESET=20ROLE;=0A=20--=20Partitioned=20table=20and=20one=20partition=20= owned=20by=20other=20user.=0A-ALTER=20TABLE=20vacowned_parted=20OWNER=20= TO=20regress_vacuum;=0A+ALTER=20TABLE=20ONLY=20vacowned_parted=20OWNER=20= TO=20regress_vacuum;=0A=20ALTER=20TABLE=20vacowned_part1=20OWNER=20TO=20= regress_vacuum;=0A=20SET=20ROLE=20regress_vacuum;=0A=20VACUUM=20= vacowned_parted;=0A@@=20-466,7=20+466,7=20@@=20VACUUM=20(ANALYZE)=20= vacowned_part1;=0A=20VACUUM=20(ANALYZE)=20vacowned_part2;=0A=20RESET=20= ROLE;=0A=20--=20Only=20one=20partition=20owned=20by=20other=20user.=0A= -ALTER=20TABLE=20vacowned_parted=20OWNER=20TO=20CURRENT_USER;=0A+ALTER=20= TABLE=20ONLY=20vacowned_parted=20OWNER=20TO=20CURRENT_USER;=0A=20SET=20= ROLE=20regress_vacuum;=0A=20VACUUM=20vacowned_parted;=0A=20VACUUM=20= vacowned_part1;=0A@@=20-479,7=20+479,7=20@@=20VACUUM=20(ANALYZE)=20= vacowned_part1;=0A=20VACUUM=20(ANALYZE)=20vacowned_part2;=0A=20RESET=20= ROLE;=0A=20--=20Only=20partitioned=20table=20owned=20by=20other=20user.=0A= -ALTER=20TABLE=20vacowned_parted=20OWNER=20TO=20regress_vacuum;=0A+ALTER=20= TABLE=20ONLY=20vacowned_parted=20OWNER=20TO=20regress_vacuum;=0A=20ALTER=20= TABLE=20vacowned_part1=20OWNER=20TO=20CURRENT_USER;=0A=20SET=20ROLE=20= regress_vacuum;=0A=20VACUUM=20vacowned_parted;=0A--=20=0A2.50.1=20(Apple=20= Git-155)=0A=0A= --Apple-Mail=_29CA0D6E-E0E1-40E9-B6FD-34E6644A4F69--