From: | Paul Linehan <linehanp(at)tcd(dot)ie> |
---|---|
To: | |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Strange SQL result - any ideas. |
Date: | 2017-09-01 22:08:32 |
Message-ID: | CAF4RT5TnnNXLZJt=-fCH_uwSB_VYSBAni6RucPxwrzjQrxmvsg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
<CREATE TABLE and INSERT INTO statements at end of post>
I have a table (fred) that I want to transform into JSON and
I use the following command (ignore the backslash stuff):
SELECT REGEXP_REPLACE(ROW_TO_JSON(t)::TEXT, '\\\\', '\\', 'g')
FROM
(
SELECT * FROM fred
ORDER BY mary, jimmy, paulie
) AS t;
which gives
regexp_replace
------------------------------------------------------
{"mary":2,"jimmy":43,"paulie":"asfasfasfd"}
{"mary":3,"jimmy":435,"paulie":"ererere"}
{"mary":3,"jimmy":44545,"paulie":"\sdfs\\\sfs\\gf"}
{"mary":6,"jimmy":43343,"paulie":"eresdfssfsfasfae"}
{"mary":35,"jimmy":5,"paulie":"wrew\sdfsd"}
(5 rows)
which is fine (note that the field "mary" is sorted correctly) but
I want "proper" JSON - i.e. with open and close square brackets
i.e. ([ - ]) before and after the fields!
So, I tried this query:
SELECT '[' AS my_data -- <<-- added line
UNION -- <<-- added line
SELECT REGEXP_REPLACE(ROW_TO_JSON(t)::TEXT, '\\\\', '\\', 'g')
FROM
(
SELECT * FROM fred
ORDER BY mary, jimmy, paulie
) AS t
UNION -- <<-- added line
SELECT ']'; -- <<-- added line
*_BUT_*, this gives
my_data
------------------------------------------------------
]
[
{"mary":6,"jimmy":43343,"paulie":"eresdfssfsfasfae"}
{"mary":35,"jimmy":5,"paulie":"wrew\sdfsd"}
{"mary":3,"jimmy":44545,"paulie":"\sdfs\\\sfs\\gf"}
{"mary":2,"jimmy":43,"paulie":"asfasfasfd"}
{"mary":3,"jimmy":435,"paulie":"ererere"}
(7 rows)
Two problems with this result - one is that my square brackets are not in
the right place - this at least I understand - the first character of
each line is sorted by its ASCII value - '[' comes before ']' (naturally)
and '{' comes after them both - or have I got that right?
But, I do *_not_* understand why my table data is now out
of sort order - I've looked at it and can't see *_how_* the sort
order in my table data has been determined.
Anybody got any logical explanations as to what's going on?
TIA & Rgs,
Paul...
-- CREATE TABLE and INSERT INTO statements.
CREATE TABLE fred (
mary integer PRIMARY KEY,
jimmy integer,
paulie character varying(20)
);
INSERT INTO fred (mary, jimmy, paulie) VALUES (2, 43, 'asfasfasfd');
INSERT INTO fred (mary, jimmy, paulie) VALUES (3, 435, 'ererere');
INSERT INTO fred (mary, jimmy, paulie) VALUES (6, 43343, 'eresdfssfsfasfae');
INSERT INTO fred (mary, jimmy, paulie) VALUES (35, 5, 'wrew\sdfsd');
INSERT INTO fred (mary, jimmy, paulie) VALUES (3, 44545, '\sdfs\\\sfs\\gf');
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2017-09-01 23:01:42 | Re: Strange SQL result - any ideas. |
Previous Message | Ken Tanzer | 2017-09-01 21:25:35 | Fields re-ordered on JOIN with * and USING |