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 1wWS5D-002clm-0T for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Jun 2026 04:59: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 1wWS59-000elY-1o for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Jun 2026 04:59:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wWS59-000elP-0d for pgsql-hackers@lists.postgresql.org; Mon, 08 Jun 2026 04:59:27 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wWS56-00000001qT2-1xmv for pgsql-hackers@lists.postgresql.org; Mon, 08 Jun 2026 04:59:26 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-490ac357c55so43818855e9.1 for ; Sun, 07 Jun 2026 21:59:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780894761; cv=none; d=google.com; s=arc-20240605; b=A6sSrzQSVIjAWhbnrM+YYODa5jTgw81Fz+btFWdnPHdMuWyKAcFPg7S1qMj02A+kgk qbZ34omH+2ncqwPR+0yP7jrg5/kYRto1UMtptgd+1lpdftaZhEZEth36EGPrfTfn1M0R h46wIXCHnK6h4ML9Alx2qWh7v8GpS/vbtF5SlO2KnSnzOv4Qf18A3ZRL2LOjmOuJlF9+ ukLQFZrYxB6Bf5VBXUGKV+EyGBEERNktTrB4zpVtnnnaOHn/AG35CfRCDhtmgVTcA76e Wo31gNhEq4yfNFh7fs6TcmiHjCGoKmYK2XkJKME49OSDfSN4GsV3MotY3OH8KilzjLlE 39pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Tx6ksVaTh/yOlatPDhDtMoTTzloHTf4wWFyAjOWZBok=; fh=NCcecnrEdn2figIBYRGoCy6qG3x+5FPQkkxGvNJpQ4g=; b=M3UByQcaVHlT81iG8av9QpIxCqe3BLhDJ8Ap/66N0iZ1LXgRKZQXMO7xbrP2xD+aAJ 1r56dTbYQg9YMbbogTGI6FchXFSHMQrA0hdOBCvRLQGV+nJAbKk+hhE0q1yKrcLSnfbs YKvQEvccRC3+v4dwRCe+rYf4TBH3V2+CYMywOcAbJjYEGx1hK0cOIVBoKE06SlilMrcf YyDtmgPw1rOh3moMPtsqMUeaEQL9zJ1o0fJvrncJNVecUjCn8WkR0C4d6bluBIj28hoh JuOXDA5wcuWw5rGmmO5bA5a0FTQqNtOTj67rmkZWlIdv6skpphLOFq/ZerDona6EDJ0U ssUw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780894761; x=1781499561; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Tx6ksVaTh/yOlatPDhDtMoTTzloHTf4wWFyAjOWZBok=; b=JhLYvG1l8s88jIcACQDbiox2qWLYUFPYVzMjvKsDVn8d6lxgbZqRoBm4GuJchJgq/p sAkdvzImwWmVVsvnA13k1UevlYfaI9uGwI3iXu/sJ+hh+WlDyWMhIM/9CqHkkC/ZrYJV LFEHljNyX7agWZYIpsMUbx2tZoTIjlRnPKlzmVpAye8ro4yLsWGmIjXjnovyQN9DEhds /sQBSKeRulLsZ5kuu07IanzLAirR/7tpsNumcPNy/nKrFegviUtpJWt/yYL36BcotQXY oIzlR9GglavPi5Jg3lUzm4F7bLdGmAUFXFRJoApArrkkKm2FlEw0pbgf3NYlWZf3fd4g RBGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780894761; x=1781499561; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Tx6ksVaTh/yOlatPDhDtMoTTzloHTf4wWFyAjOWZBok=; b=hN5ndZnbUBpwGE+GzMlN1NRJARGlcY1QWorXOMEB/ej+JrI9jvZtAD7dqPJIvG+Ta/ ePQ/aRQrFxbG8+69ut+T5XiYfTlKvYs9UXpXd3M2H87v6ziFqN+z+pcKRns8HphyGegP gwubeeQiTrZexT4UfP4ZCe4oGUtCmjNV5KryIKHHNqG19KkLMh3pz24ITku03TRuj1uz bIAz3f2DiIFeHJsYW50daGp0hoUgJDEEO3pf3xxHLLojzkNvSPw1WuGISnOWCeo+QrnB ZZ50CeoE3O74CpvC07+CUnOGlNQ9sbSktJslw6PDOaInKpRzy5uSmkQAgtwYLGyJ1HV3 YCOA== X-Forwarded-Encrypted: i=1; AFNElJ/TZlWdmR+Gqkm6TCYe80KRtflN1I4YaoxyXBYO1zzv/Bpxy9Kn9wW6DOETHqfplCTlTkdpFyXfVqNMWzcq@lists.postgresql.org X-Gm-Message-State: AOJu0Yy/T0g+Bj+8TPKrkhrSrtu91Ho6ys83EWWvubtjcJcfLuUyrRG2 pzaq+WCVCrgUSE1+7ToSNaADyij7Rpepu6Xi+sY7HbdZXOQoJuj2Q+kMES60I31kHeClQsUQiul i0wkMQ167avMlttVNvrbRSi3os4dGbY0= X-Gm-Gg: Acq92OEtxrij7kmSWdMRivuSHkTSEeBhq1q3psh/RvmpSs/zrgdKo/tP9tuu11c1FoZ Y86M1S+UuRKlbSr1bf5MaHPB8nxcApue18tNIFblJ6qORfgjz0PsywmAeSSnfKVoceANLm/zYEC 7zLJ2O7hTUG7mbgYRuzJNLPEAmy4QpSO99svE0JVWYxqLyXQRnBoeJ0nNOrh/NIZusHGIWXnaW0 7aOcnDWRv1QSRgrwlw9yrmW/FdaIoInJCVW1S3KjaQ5bLsKqEQYMMAejoV2UPdpFsbXfQ/I7WrT tkiBhxyE2Dm1bwVoB/wBT4UXNPuMJBgybQbdz2J/ZAv1BcH7w9UeIV4Vv7n8OtGvizmM2keT6zy O6lDvCZAMqMF9gg/F1iABx5Ibg82u4ZGH8PiZ7Y5lMggx+f918PFUVOT1RYsEGg== X-Received: by 2002:a05:600c:3e15:b0:490:adb6:793d with SMTP id 5b1f17b1804b1-490c25f67d9mr228424075e9.26.1780894761072; Sun, 07 Jun 2026 21:59:21 -0700 (PDT) MIME-Version: 1.0 References: <29c33fb6-4200-4a08-be3d-a1a2ceef23b8@eisentraut.org> <200148.1780878520@sss.pgh.pa.us> In-Reply-To: <200148.1780878520@sss.pgh.pa.us> From: Ashutosh Bapat Date: Mon, 8 Jun 2026 10:29:09 +0530 X-Gm-Features: AVVi8Cf3i4nfc8rizTjGmzfwBCDBl9zSX_NVoPvDdKw2b_83dKVwH5tOY0qe6GY Message-ID: Subject: Re: Fix DROP PROPERTY GRAPH "unsupported object class" error To: Tom Lane , Michael Paquier Cc: Peter Eisentraut , Alex Guo , Bertrand Drouvot , pgsql-hackers@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, Jun 8, 2026 at 5:58=E2=80=AFAM Tom Lane wrote: > > Michael Paquier writes: > > + property graph element label | | | e of e of > > create_property_graph_tests.gt > > + property graph element label | | | v1 of v1 of > > create_property_graph_tests.gt > > + property graph element label | | | v2 of v2 of > > create_property_graph_tests.gt > > [...] > > + property graph label property | | | c of e of e of > > create_property_graph_tests.gt > > + property graph label property | | | k1 of e of e of > > create_property_graph_tests.gt > > + property graph label property | | | k2 of e of e of > > create_property_graph_tests.gt > > > FWIW, I still find these descriptions written as of "$object of > > $object of..", or worse the "$object1 of $object2 of $object2 of..", > > really hard to parse, and make some sense out of them. Am I the only > > one? > > No. At the very least, these messages violate our style guidelines [1]: > > Type of the Object > > When citing the name of an object, state what kind of object it is. > > Rationale: Otherwise no one will know what =E2=80=9Cfoo.bar.baz=E2=80= =9D refers to. > > I'm not sure whether adding that would be sufficient to make these > intelligible, but surely it would help. I think your first example > would come out like > > label e of property(?) e of property graph create_property_graph_test= s.gt My guess is Michael and Tom are referring to two different things. I guess, the output that Michael refers to is the value of the Identity column from pg_identify_object() (in create_property_graph.out). I guess what Tom is referring to is the object description in server error messages, which uses getObjectDescription() underneath, which in turn is also called from pg_describe_object(). create_property_graph.out has outputs from both pg_describe_object() and pg_identify_object(). It's easy to get confused between outputs of both when the outputs are pasted without the query which generated the output. pg_describe_object() correctly outputs the description as per the documented guidelines at [1]. For example "property c of label e of edge e of property graph gt" or "label e of edge e of property graph gt". Tom, does that address your concern? Let's take a look at Michael's concern now. The identity column of pg_identity_object() ultimately comes from getObjectIdentity()->getObjectIdentityParts(). The prologue of getObjectIdentity() says the output is for machine consumption (so not necessarily human consumable). The identity column should be read in the context of the object type column of pg_identity_object(). For example, let's consider the following lines from the output SELECT (pg_identify_object(classid, objid, objsubid)).* FROM (SELECT DISTINCT classid, objid, objsubid FROM deps_tree) ORDER BY 1, 2, 3, 4; type | schema | name | identity -------------------------------+--------+------+---------------------------= ---------------------- property graph label property | | | k1 of e of e of create_property_graph_tests.gt property graph label property | | | k2 of e of e of create_property_graph_tests.gt The type of object is "property graph label property", which connects a property to an element through a label. Hence there is only one interpretation of the identity column i.e. "property k1/k2 of label e of element e of property graph gt. That fits the charter of getObjectIdentityParts(). If we do as Michael suggests we will turn getObjectIdentityParts() into getObjectDescription(). Those two functions have different charters Looking at getObjectIdentityParts(), it seems that that function should produce strings which connect objects using prepositions or adjectives instead of explicit object types. For example, for a constraint getObjectDescription() returns "constraint C on table R" whereas getIndentityParts() returns "C on R". For an operator class "operator class O for access method A" whereas getIdentityParts() returns "O USING A". Considering these examples I think the current output of getObjectIdentityParts() and getObjectDescription() for various property graph components is correct. "of" is the right preposition connecting components of a property graph. Am I missing something? [1] https://www.postgresql.org/docs/current/error-style-guide.html#ERROR-ST= YLE-GUIDE-OBJECT-TYPE --=20 Best Wishes, Ashutosh Bapat