Invalid input syntax for type json..

Fragen und Probleme rund um die Abfragespache SQL.
cagksw
Neuer Benutzer
Beiträge: 12
Registriert: Do 28. Jun 2018, 14:20

Invalid input syntax for type json..

Beitrag von cagksw » Do 28. Jun 2018, 14:43

Grüß Euch und ein Hallo an Alle hier im Forum!

Ich bin mit PostgreSQL noch nicht so vertraut und habe eine Frage zum Datentyp json bzw. jsonb.
Der Unterschied zwischen den beiden Datentypen ist mir soweit bekannt.

Ich arbeite im Moment an einem Projekt (https://stackoverflow.com/questions/510 ... -any-ideas auf Stackoverflow) mit node, express, pg-node angular und PostgreSQL.

Hier das setup:
Diagram_01.png
Diagram_01.png (50.13 KiB) 2744 mal betrachtet
Und hier ein Beispiel-Table mit Namen 'tmp'
table_example.PNG
table_example.PNG (3.91 KiB) 2742 mal betrachtet
via pgAdmin 4 funktioniert es ohne Probleme:

Code: Alles auswählen

UPDATE tmp SET data = '{"foo": false}' WHERE id = '1'
Aber wenn ich ein UPDATE über meine Express-Route via pg ausführe:

Code: Alles auswählen

router.put('/updateTMP', (req, res) => {
    // Ich verwende DummyData anstatt req.body.someKey zum Testen
    let dummyJSON = {"foo":true};
    let dummyID = 1;
    pg.query(`UPDATE tmp SET data = '${dummyJSON}' WHERE id = '${dummyID}'`, (errUpdate, responseUpdate) => {
        if (!errUpdate) { // NO ERROR
            res.json({success: true, message: responseUpdate});
        }
        else { // ERROR
            console.log(dummyJSON);
            console.log(errUpdate);
            res.json({success: false, message: errUpdate}); 
        }
    })
})
erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

error: invalid input syntax for type json
Und wenn ich die interne Funktion to_json() verwende, erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

error: 'could not determine polymorphic type because input has type "unknown"'
Habe ich da etwas gravierendes übersehen oder verstehe ich http://json.org/ und https://www.postgresql.org/docs/9.6/sta ... -json.html falsch?
Dateianhänge
Diagram_01.png
Diagram_01.png (50.13 KiB) 2744 mal betrachtet

akretschmer
Erfahrener Benutzer
Beiträge: 7458
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Invalid input syntax for type json..

Beitrag von akretschmer » Do 28. Jun 2018, 14:58

vermutlich ein Quoting-Problem. Was steht im Log der DB?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

cagksw
Neuer Benutzer
Beiträge: 12
Registriert: Do 28. Jun 2018, 14:20

Re: Invalid input syntax for type json..

Beitrag von cagksw » Do 28. Jun 2018, 15:04

hier der STDERR via Terminal:

{ error: invalid input syntax for type json
at Connection.parseE (C:\\projects\CUPERIN\node_modules\pg\lib\connection.js:553:11)
at Connection.parseMessage (C:\projects\CUPERIN\node_modules\pg\lib\connection.js:378:19)
at Socket.<anonymous> (C:\projects\CUPERIN\node_modules\pg\lib\connection.js:119:22)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at TCP.onread (net.js:607:20)
name: 'error',
length: 161,
severity: 'ERROR',
code: '22P02',
detail: 'Token "object" is invalid.',
hint: undefined,
position: '55',
internalPosition: undefined,
internalQuery: undefined,
where: 'JSON data, line 1: [object...',
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'json.c',
line: '1244',
routine: 'report_invalid_token' }

akretschmer
Erfahrener Benutzer
Beiträge: 7458
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Invalid input syntax for type json..

Beitrag von akretschmer » Do 28. Jun 2018, 15:07

das ist nicht das Log der DB ...
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

cagksw
Neuer Benutzer
Beiträge: 12
Registriert: Do 28. Jun 2018, 14:20

Re: Invalid input syntax for type json..

Beitrag von cagksw » Do 28. Jun 2018, 15:10

in postgresql.conf ist der default 'stderr ' via terminal..

'The default is to log to stderr only. This parameter can only be set in the postgresql.conf file or on the server command line.'

link: https://www.postgresql.org/docs/9.6/sta ... gging.html

oder verstehe ich da etwas falsch?

ps: ich schau mal in die pg_log.

cagksw
Neuer Benutzer
Beiträge: 12
Registriert: Do 28. Jun 2018, 14:20

Re: Invalid input syntax for type json..

Beitrag von cagksw » Do 28. Jun 2018, 15:26

2017-04-27 01:09:32.993 CEST [11087] LOG: database system was shut down at 2017-04-27 01:09:31 CEST
2017-04-27 01:09:32.997 CEST [11087] LOG: MultiXact member wraparound protections are now enabled
2017-04-27 01:09:33.010 CEST [11091] LOG: autovacuum launcher started
2017-04-27 01:09:33.011 CEST [11085] LOG: database system is ready to accept connections
2017-04-27 01:09:33.393 CEST [11093] [unknown]@[unknown] LOG: incomplete startup packet
2017-04-27 01:10:25.301 CEST [11115] postgres@cuperin ERROR: invalid input syntax for type json at character 55
2017-04-27 01:10:25.301 CEST [11115] postgres@cuperin DETAIL: Token "object" is invalid.
2017-04-27 01:10:25.301 CEST [11115] postgres@cuperin CONTEXT: JSON data, line 1: [object...
2017-04-27 01:10:25.301 CEST [11115] postgres@cuperin STATEMENT: UPDATE tmp SET data = '[object Object]' WHERE id = '1'

akretschmer
Erfahrener Benutzer
Beiträge: 7458
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Invalid input syntax for type json..

Beitrag von akretschmer » Do 28. Jun 2018, 15:31

'[object Object]' ist kein valides JSON
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

cagksw
Neuer Benutzer
Beiträge: 12
Registriert: Do 28. Jun 2018, 14:20

Re: Invalid input syntax for type json..

Beitrag von cagksw » Do 28. Jun 2018, 15:55

Danke für deine Hilfe ;) das ist mir bereits aufgefallen, nur verstehe ich nicht ganz wie aus {"foo":true} (valides JSON) ein [object Object] werden kann - dürfte eventuell am pg-modul von node liegen - werd mir das mal genauer anschauen..

cagksw
Neuer Benutzer
Beiträge: 12
Registriert: Do 28. Jun 2018, 14:20

Re: Invalid input syntax for type json..

Beitrag von cagksw » Do 28. Jun 2018, 16:28

Einige console.log's später ist mir bewusst geworden, das Node's V8 JavaScript engine das als Variable übergebene JSON-Objekt als [object] wahrnimmt:

let updateData = {"foo":true};
pg.query(`UPDATE tmp SET data = '${updateData}' WHERE id = '1'`, (errUpdate, responseUpdate) => { ...

Wenn ich die Query in text ausformuliere und nur den boolean-Wert als Variable übergebe funktioniert es:

let statusFoo = true;
pg.query(`UPDATE tmp SET data = '{"foo":${statusFoo}}' WHERE id = '1'`, (errUpdate, responseUpdate) => { ...

Danke Dir @akretschmer für Deine Hilfe und die rasche Response!

akretschmer
Erfahrener Benutzer
Beiträge: 7458
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Invalid input syntax for type json..

Beitrag von akretschmer » Do 28. Jun 2018, 16:37

cagksw hat geschrieben:
Do 28. Jun 2018, 16:28

Danke Dir @akretschmer für Deine Hilfe und die rasche Response!
wohin kann ich denn nun die Rechnung schicken?


;-)
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten