Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1in4ol-0004df-Ds for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2020 18:03:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1in4ok-0007Qh-8h for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2020 18:03:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1in4oj-0007Qa-J2 for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2020 18:03:30 +0000 Received: from xvm-110-146.dc2.ghst.net ([46.226.110.146] helo=fetter.org) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1in4og-0002kF-0e for pgsql-hackers@postgresql.org; Thu, 02 Jan 2020 18:03:29 +0000 Received: by fetter.org (Postfix, from userid 1001) id 33512404D5; Thu, 2 Jan 2020 19:03:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fetter.org; s=default; t=1577988204; bh=ZKLF1JWOcfNTecHcylkO1mz3j//mYIQynvjgelKSVao=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=2Inn5QZi4lXEcEeDg3deqrK7iV8pdr5d1cKgpqsWCS8nVImOkQGob1ZgaBP1pCucA Z8PMHmmTDcMJ1jCWP+TVehATzWqCme0SxqparNUhdvjusl1Cg3N8TrjV9YRfg1RMRG BLLgrt7XpwtoOlDdKGldDofygQdwe3t2p/gOdKs7fNtNkJMbCbhgpv45T9l5VULpVJ wckrWvS5bl4sQelemnJjjux+TLNNRtTJg/ZkxxeViCSHDvIG1XtRRfAvXjSG5A09a5 FE38V4wp/OLQxsQs8v5yzNoaePqgrK0qVGUBquzYvWVq1rDlT0NpMc692GyIGC3dXq Ubjpt3JSDRMCw== Date: Thu, 2 Jan 2020 19:03:23 +0100 From: David Fetter To: Robert Haas Cc: Tom Lane , David Steele , Tels , Suraj Kharage , Rushabh Lathia , Andrew Dunstan , PostgreSQL Hackers , Jeevan Chalke , vignesh C Subject: Re: backup manifests Message-ID: <20200102180322.GT32763@fetter.org> References: <20191231174325.GQ32763@fetter.org> <7cb79c9e-8377-b2b5-3fa4-9775e1aca1fe@pgmasters.net> <20200101190917.GR32763@fetter.org> <7437.1577925975@sss.pgh.pa.us> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On Wed, Jan 01, 2020 at 08:57:11PM -0500, Robert Haas wrote: > On Wed, Jan 1, 2020 at 7:46 PM Tom Lane wrote: > > David Fetter writes: > > > On Wed, Jan 01, 2020 at 01:43:40PM -0500, Robert Haas wrote: > > >> So, if someone can suggest to me how I could read JSON from a tool in > > >> src/bin without writing a lot of code, I'm all ears. > > > > > Maybe I'm missing something obvious, but wouldn't combining > > > pg_read_file() with a cast to JSONB fix this, as below? > > > > Only if you're prepared to restrict the use of the tool to superusers > > (or at least people with whatever privilege that function requires). > > > > Admittedly, you can probably feed the data to the backend without > > use of an intermediate file; but it still requires a working backend > > connection, which might be a bit of a leap for backup-related tools. > > I'm sure Robert was envisioning doing this processing inside the tool. > > Yeah, exactly. I don't think verifying a backup should require a > running server, let alone a running server on the same machine where > the backup is stored and for which you have superuser privileges. Thanks for clarifying the context. > AFAICS, the only options to make that work with JSON are (1) introduce > a new hand-coded JSON parser designed for frontend operation, (2) add > a dependency on an external JSON parser that we can use from frontend > code, or (3) adapt the existing JSON parser used in the backend so > that it can also be used in the frontend. > > I'd be willing to do (1) -- it wouldn't be the first time I've written > JSON parser for PostgreSQL -- but I think it will take an order of > magnitude more code than using a file with tab-separated columns as > I've proposed, and I assume that there will be complaints about having > two JSON parsers in core. I'd also be willing to do (2) if that's the > consensus, but I'd vote against such an approach if somebody else > proposed it because (a) I'm not aware of a widely-available library > upon which we could depend and I believe jq has an excellent one that's available under a suitable license. Making jq a dependency seems like a separate discussion, though. At the moment, we don't use git tools like submodel/subtree, and deciding which (or whether) seems like a gigantic discussion all on its own. > (b) introducing such a dependency for a minor feature like this > seems fairly unpalatable to me, and it'd probably still be more code > than just using a tab-separated file. I'd be willing to do (3) if > somebody could explain to me how to solve the problems with porting > that code to work on the frontend side, but the only suggestion so > far as to how to do that is to port memory contexts, elog/report, > and presumably encoding handling to work on the frontend side. This port has come up several times recently in different contexts. How big a chunk of work would it be? Just so we're clear, I'm not suggesting that this port should gate this feature. > That seems to me to be an unreasonably large lift, especially given > that we have lots of other files that use ad-hoc formats already, > and if somebody ever gets around to converting all of those to JSON, > they can certainly convert this one at the same time. Would that require some kind of file converter program, or just a really loud notice in the release notes? Best, David. -- David Fetter http://fetter.org/ Phone: +1 415 235 3778 Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate