ZPretty is not in OEX anymore for various version conflicts
But in IPM you may find this workaround left over.

user>zpm "install pretty-json-upd" 

For this and other incompatibilities introduced by version changes the
repo on GitHub is broken and not available until several fixes.
Workaround for the left over version is ZPM once again

USER>zpm "install objectscript-native-api"


Studio-2024.1.5.649.0-win.msi  is still available from WRC download for contracted customers
It works perfectly for me on  IRIS for Windows (x86-64) 2025.1

My guess youw workaroud ERROR 2 cause ERROR 1

ERROR 2:
Your import of the code is just WRONG.   Wherever you may have it copied  it from

jsn(jsn) 
	if $e(jsn)="{" write $$Do^ZPretty(jsn)
	else  write "<UNDEFINED>"
	quit }

 jsn(jsn)  is a Label with a parameter

But if your COPY/ TEXT manipulator doesn't understand ObjectScript and 
inserts a BLANK before jsn(jsn)  ,  it's no longer a label anymore but just nonsens 
therefore :

ERROR: ONAPI.demo.cls(Menu+35) #1026: Invalid command : 'jsn(jsn)' :
Offset:7 [Menu+34^ONAPI.demo.1]

The compiler is right ! Your code is broken

ERROR 1:
now as the label jsn doesn'1 exist anymore, this MUST be an ERROR

 if pop do jsn(..iris.ClassMethodValue("ONAPI.Person","JSON",pop))

ERROR: ONAPI.demo.cls(Menu+9) #8: <NOLINE> [Menu+8^ONAPI.demo.1] 
TEXT:     if pop do jsn(..iris.ClassMethodValue("ONAPI.Person","JSON",pop))

The compiler is right again! Your code is broken. The label jsn() is destroyed

In Intersystems ObjectScript blanks and tabs are not just for illustration
or visualization but are an essential part of the language with some functionality.
Somehow like exact indenting in Python, just ~60 years longer

In my Studio such typing errors are flagged red immediately during typing.
So I wonder where the obviously broken source came from and how you worked on it

What you describe is a Basic Class Query. Slightly advanced to embedded SQL
BUT inside a Custom Class Query 
https://docs.intersystems.com/supplychain20251/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_queries_userqueries

You have Exec, and Fetch methods. 
They can mask whatever you like as long as you feed the formal requirements.
Define the following class methods in the same class:

  • querynameExecute — This method must perform any one-time setup.
  • querynameFetch — This method must return a row of the result set; each subsequent call returns the next row.
  • querynameClose — This method must perform any cleanup operations.

Where queryname is the name of the query.

Each of these methods accepts an argument (qHandle), which is passed by reference. You can use this argument to pass information among these methods.

So you can mask your DELETE (implemented by embedded SQL) or any other way
It's not the standard way, but nothing prevents you as long as the formalism is served.

You may reduce the number of  XDBC connects by 50%
#1)
Create an SQL function for the update

CREATE FUNCTION done_func(integer,varchar) RETURNS integer
    AS 'update my_postgres_table set status=$2 where id=$1'
    LANGUAGE SQL
    IMMUTABLE
    RETURNS NULL ON NULL INPUT
    RETURN 1 ;

#2)
run your SELECT, adding the function in your WHERE clause which is always TRUE
 

select * from my_postgres_table limit 10000 Where 1 = done_Func(id,'S')	

You should check the exact syntax for PostgreSQL
I just composed it guided by
https://www.postgresql.org/docs/current/sql-createfunction.html 
 

@Evgeny Shvarov  you  pointed me to the correct place
Did some checks using the most native approach.

 set sc=$system.OBJ.Import(file, . . . . .

Removing the Export Tag from the 2nd line in the 'hidden XML'  names DFI

<Export generator="IRIS" version="26" zv="IRIS for Windows (x86-64) 2024.3 (Build 217U)" ts="2025-09-21 16:53:05">

ends with unknown flle type !!!

After re-insert of that Export Tag all import works perfect


​​​​​​might be necessary to teach VScode to add that tag

1️⃣ When you joined the Developer Community and how you first discovered it.

I joined in 2017, and it was by accident.
Looking for help to work around a problem caused by "academic ignorance".
    Some linguistic university experts for German language up in sky, far from reality, decided:
    "S_sharp"  ß (a lowercase only character for hundreds of years)
    will be also an uppercase character from now on.
No one cared about the impact to sort orders, code conversions, pattern match. regular expressions, ...
My cry for help:
German collation of ß in upper and lower case
In DC I got help and advice within a few hours on how to escape
until a new release or bug fix might have an official solution.

Exploring DC was another big surprise for me.
It was rather similar to a proposal I had done in 2005
and  I was massively pushed back by service managers at that time.

DC covered and extended my basic intentions
I fell in love immediately and still feel like a proud grandfather
observing his successful growing grandchildren.

2️⃣ A meaningful moment or story from your personal journey here.

It was somewhat longer than a moment, though just a single trigger.
The challenge was to start working with Docker in some OEX package
Before that, I was rather resistant to publishing complex examples.
The effort to describe a complex setup and not having control
over implementation was rather significant.
With Docker I had a reproducible environment and no traces or remaining
junk after termination.

Another extra was learning to produce videos of my examples for contests.
I never did it before and still don't have any private videos on Youtube.

3️⃣ An article, question, or discussion you consider especially valuable

There are two recent articles that moved me most:
The Wait Is Over: Welcome GoLang Support for InterSystems IRIS + followers
and
Reducing the Footprint of the Docker image of IRIS Community Edition

It's 2 times the same authoring engineer, and what he presents matches my
personal understanding of what quality software system engineering is like:
- precise and detailed analysis
- detailed and fully through tested code before release
- 2 top-class projects

My personal sorrow:
There are groups that may force out the results just because of the
"NOT INVENTED HERE" mentality in some areas.
I speak based on personal experience after being attacked following
a backport of %JSON classes to Caché some years ago.