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.94.2) (envelope-from ) id 1rVfiO-000fjB-Ul for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Feb 2024 22:39:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rVfiO-008GfX-1w for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Feb 2024 22:39:24 +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.94.2) (envelope-from ) id 1rVfiN-008GfP-Fy for pgsql-hackers@lists.postgresql.org; Thu, 01 Feb 2024 22:39:23 +0000 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rVfiK-004bBo-J4 for pgsql-hackers@postgresql.org; Thu, 01 Feb 2024 22:39:21 +0000 Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-5dbf050821fso793649a12.2 for ; Thu, 01 Feb 2024 14:39:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgguru-net.20230601.gappssmtp.com; s=20230601; t=1706827159; x=1707431959; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9UjCpQG3gg4avP04sL3rGNYgIrEvJF0YzNdmThVuE4s=; b=PzK1ajwJh7mI5AA1di/kawHZ6vegqgfO0NaSo++lhkd+LAZrB+0r3jHHcc1DMBP+uu WbXTJnPWBj5hM78fbHB65EA4JOVtZztW/tqPwYZfGZxflWf5qunHXFSFBZjKwGn7K7XU yowF/lOD7oK+a841Uhsnz+oDgVtcDTeTS0e79vADZBnai6+J/5P98ugkKcPLrXIbK2W/ Dt0Z39l1CZec36fgEelzhNuGuhbSKKhztlS7tUWw6CgjTCaMgOEBOavmhYtoh+j+bDVJ L2Drg40HQ9Eefrs+3jWUIgzj4pHZaqEn13rY1pawZww6vPMdPHlDYSHZM2MES3edfxt4 0THA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706827159; x=1707431959; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9UjCpQG3gg4avP04sL3rGNYgIrEvJF0YzNdmThVuE4s=; b=EtNEjLcPgs+M+Rv7vkn5KKrH8itrYnJ2wK9pZBN1oJJKUscioMvuzWtgA5VqM3gmXB u/3RCEgL4eyQNKNOK1BFAm9HhKmRYiYkYnaX2kSs0IEwvBmXFDqKUDl66rPgOlmmB+aj mBTMW/4pGygZU/UiN16s1zgAW1jfV0SfUzstBMjYdcwaC3ZMNW3/+htssanpDyX6XdQB CxOOHWyIoFiAIZKfni2D03Uip4pZZ8rFxWzHNtEmyhKuhwtez0FLvnSD9Oc/0WeOVs5x j5GyYppNfepe6ZD8kv31Ux/ji8vipriKts/U6i7SlF2soNkg2+394M8QlYO1HrLWLgKW Td1w== X-Gm-Message-State: AOJu0Yz8ChIoBm/HKtaLhnh1hYJN/+VAi08LFB5djflRyxuq/0Y8kEqi dpgiyxghGWxCklMLDwHdtRXi4LPA0/pgfnvOEmeq325rMU1SqDui2swhfRN/T6uNHfOTk6kR8wz Y72BX/gbqr8n451jc9t2mGNi44yGH7Y8rTO4aDQ== X-Google-Smtp-Source: AGHT+IEggHRxjeEoqhJfADDCMdXRplYt2EuNKvWTUr907jXQqfSVglHM4uT9+KgpF56bn9VCmMss6i4msO6umsAQKBI= X-Received: by 2002:a05:6a20:4f1d:b0:19e:4ada:1f42 with SMTP id gi29-20020a056a204f1d00b0019e4ada1f42mr235347pzb.30.1706827159388; Thu, 01 Feb 2024 14:39:19 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: David Christensen Date: Thu, 1 Feb 2024 16:39:08 -0600 Message-ID: Subject: Re: Adding comments to help understand psql hidden queries To: Greg Sabino Mullane Cc: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000877d74061059aa0a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000877d74061059aa0a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 1, 2024 at 4:34=E2=80=AFPM Greg Sabino Mullane wrote: > > The use of the --echo-hidden flag in psql is used to show people the way = psql performs its magic for its backslash commands. None of them has more m= agic than "\d relation", but it suffers from needing a lot of separate quer= ies to gather all of the information it needs. Unfortunately, those queries= can get overwhelming and hard to figure out which one does what, especiall= y for those not already very familiar with the system catalogs. Attached is= a patch to add a small SQL comment to the top of each SELECT query inside = describeOneTableDetail. All other functions use a single query, and thus ne= ed no additional context. But "\d mytable" has the potential to run over a = dozen SQL queries! The new format looks like this: > > /******** QUERY *********/ > /* Get information about row-level policies */ > SELECT pol.polname, pol.polpermissive, > CASE WHEN pol.polroles =3D '{0}' THEN NULL ELSE pg_catalog.array_to_str= ing(array(select rolname from pg_catalog.pg_roles where oid =3D any (pol.po= lroles) order by 1),',') END, > pg_catalog.pg_get_expr(pol.polqual, pol.polrelid), > pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid), > CASE pol.polcmd > WHEN 'r' THEN 'SELECT' > WHEN 'a' THEN 'INSERT' > WHEN 'w' THEN 'UPDATE' > WHEN 'd' THEN 'DELETE' > END AS cmd > FROM pg_catalog.pg_policy pol > WHERE pol.polrelid =3D '134384' ORDER BY 1; > /************************/ > > Cheers, > Greg Thanks, this looks like some helpful information. In the same vein, I'm including a patch which adds information about the command that generates the given query as well (atop your commit). This will modify the query line to include the command itself: /******** QUERY (\dRs) *********/ Best, David --000000000000877d74061059aa0a Content-Type: application/octet-stream; name="0001-Add-output-of-the-command-that-got-us-here-to-the-QU.patch" Content-Disposition: attachment; filename="0001-Add-output-of-the-command-that-got-us-here-to-the-QU.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls3srwir0 RnJvbSAwN2Y3NWM2MjIwMjk3YmIyZmJhN2M4MGI2NjY0NDVmOTIwN2NmZmJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBDaHJpc3RlbnNlbiA8ZGF2aWQuY2hyaXN0ZW5zZW5A Y3J1bmNoeWRhdGEuY29tPgpEYXRlOiBUaHUsIDEgRmViIDIwMjQgMTQ6NTg6MzQgLTA2MDAKU3Vi amVjdDogW1BBVENIXSBBZGQgb3V0cHV0IG9mIHRoZSBjb21tYW5kIHRoYXQgZ290IHVzIGhlcmUg dG8gdGhlIFFVRVJZCiBvdXRwdXQKCi0tLQogc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyB8ICA1ICsr KysrCiBzcmMvYmluL3BzcWwvY29tbW9uLmMgIHwgMTYgKysrKysrKysrKysrLS0tLQogMiBmaWxl cyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCmluZGV4IDVj OTA2ZTQ4MDYuLjZlNTVmODFiMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMK KysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtNTYsNiArNTYsOCBAQCB0eXBlZGVmIGVu dW0gRWRpdGFibGVPYmplY3RUeXBlCiAJRWRpdGFibGVWaWV3LAogfSBFZGl0YWJsZU9iamVjdFR5 cGU7CiAKK2NoYXIgKmN1cmNtZCA9IE5VTEw7CisKIC8qIGxvY2FsIGZ1bmN0aW9uIGRlY2xhcmF0 aW9ucyAqLwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmQoY29uc3QgY2hhciAq Y21kLAogCQkJCQkJCQkJUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLApAQCAtMzA3LDYgKzMwOSw3 IEBAIGV4ZWNfY29tbWFuZChjb25zdCBjaGFyICpjbWQsCiAJCQkJCSAgIGNtZCk7CiAJfQogCisJ Y3VyY21kID0gY21kOwogCWlmIChzdHJjbXAoY21kLCAiYSIpID09IDApCiAJCXN0YXR1cyA9IGV4 ZWNfY29tbWFuZF9hKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwogCWVsc2UgaWYgKHN0cmNt cChjbWQsICJiaW5kIikgPT0gMCkKQEAgLTQyMyw2ICs0MjYsOCBAQCBleGVjX2NvbW1hbmQoY29u c3QgY2hhciAqY21kLAogCWVsc2UKIAkJc3RhdHVzID0gUFNRTF9DTURfVU5LTk9XTjsKIAorCWN1 cmNtZCA9IE5VTEw7CisKIAkvKgogCSAqIEFsbCB0aGUgY29tbWFuZHMgdGhhdCByZXR1cm4gUFNR TF9DTURfU0VORCB3YW50IHRvIGV4ZWN1dGUgcHJldmlvdXNfYnVmCiAJICogaWYgcXVlcnlfYnVm IGlzIGVtcHR5LiAgRm9yIGNvbnZlbmllbmNlIHdlIGltcGxlbWVudCB0aGF0IGhlcmUsIG5vdCBp bgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1v bi5jCmluZGV4IDc2ZTAxYjAyYTMuLjc3NDk2NTZmNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC9jb21tb24uYworKysgYi9zcmMvYmluL3BzcWwvY29tbW9uLmMKQEAgLTQyLDYgKzQyLDcgQEAg c3RhdGljIGludAlFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwK IHN0YXRpYyBib29sIGNvbW1hbmRfbm9fYmVnaW4oY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGlj IGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3QgY2hhciAqcXVlcnkpOwogCitleHRlcm4gY2hh ciAqY3VyY21kOwogCiAvKgogICogb3BlblF1ZXJ5T3V0cHV0RmlsZSAtLS0gYXR0ZW1wdCB0byBv cGVuIGEgcXVlcnkgb3V0cHV0IGZpbGUKQEAgLTU4MSw2ICs1ODIsNyBAQCBQR3Jlc3VsdCAqCiBQ U1FMZXhlYyhjb25zdCBjaGFyICpxdWVyeSkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CisJY2hhciAq bGFiZWwgPSAiIjsKIAogCWlmICghcHNldC5kYikKIAl7CkBAIC01ODgsMjEgKzU5MCwyNyBAQCBQ U1FMZXhlYyhjb25zdCBjaGFyICpxdWVyeSkKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGN1 cmNtZCkKKwkJbGFiZWwgPSBwc3ByaW50ZigiIChcXCVzKSIsIGN1cmNtZCk7CisKIAlpZiAocHNl dC5lY2hvX2hpZGRlbiAhPSBQU1FMX0VDSE9fSElEREVOX09GRikKIAl7Ci0JCXByaW50ZihfKCIv KioqKioqKiogUVVFUlkgKioqKioqKioqL1xuIgorCQlwcmludGYoXygiLyoqKioqKioqIFFVRVJZ JXMgKioqKioqKioqL1xuIgogCQkJCSAiJXNcbiIKLQkJCQkgIi8qKioqKioqKioqKioqKioqKioq KioqKiovXG5cbiIpLCBxdWVyeSk7CisJCQkJICIvKioqKioqKioqKioqKioqKioqKioqKioqL1xu XG4iKSwgbGFiZWwsIHF1ZXJ5KTsKIAkJZmZsdXNoKHN0ZG91dCk7CiAJCWlmIChwc2V0LmxvZ2Zp bGUpCiAJCXsKIAkJCWZwcmludGYocHNldC5sb2dmaWxlLAotCQkJCQlfKCIvKioqKioqKiogUVVF UlkgKioqKioqKioqL1xuIgorCQkJCQlfKCIvKioqKioqKiogUVVFUlklcyAqKioqKioqKiovXG4i CiAJCQkJCSAgIiVzXG4iCi0JCQkJCSAgIi8qKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiIp LCBxdWVyeSk7CisJCQkJCSAgIi8qKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiIpLCBsYWJl bCwgcXVlcnkpOwogCQkJZmZsdXNoKHBzZXQubG9nZmlsZSk7CiAJCX0KIAorCQlpZiAoY3VyY21k KQorCQkJcGZyZWUobGFiZWwpOworCiAJCWlmIChwc2V0LmVjaG9faGlkZGVuID09IFBTUUxfRUNI T19ISURERU5fTk9FWEVDKQogCQkJcmV0dXJuIE5VTEw7CiAJfQotLSAKMi4zOS4zIChBcHBsZSBH aXQtMTQ1KQoK --000000000000877d74061059aa0a--