[{"data":1,"prerenderedAt":65},["ShallowReactive",2],{"integration-node-red-contrib-postgresql\u002F":3},{"_id":4,"categories":5,"author":9,"description":12,"npmOwners":13,"npmScope":15,"name":4,"ffCertified":16,"downloads":17,"version":19,"updatedAt":20,"tier":21,"maintainers":22,"homepage":25,"bugs":26,"repository":28,"time":31,"lastUpdated":20,"created":32,"license":55,"githubOwner":56,"githubRepo":4,"examples":57,"readme":64},"node-red-contrib-postgresql",[6,7,8],"catalogue_database","catalogue_storage","catalogue",{"name":10,"url":11},"Alexandre Alapetite","https:\u002F\u002Fgithub.com\u002FAlkarex","Node-RED node for PostgreSQL, supporting parameters, split, back-pressure",[14],"alkarex",null,true,{"week":18},1924,"0.15.4","2025-09-27T14:19:11.644Z","recommended",[23],{"name":14,"email":24},"alexandre@alapetite.fr","https:\u002F\u002Fgithub.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql#readme",{"url":27},"https:\u002F\u002Fgithub.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql\u002Fissues",{"type":29,"url":30},"git","git+https:\u002F\u002Fgithub.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql.git",{"created":32,"modified":20,"0.1.1":33,"0.1.2":34,"0.2.0":35,"0.2.1":36,"0.3.0":37,"0.4.3":38,"0.5.0":39,"0.6.0":40,"0.7.0":41,"0.8.0":42,"0.9.0":43,"0.10.1":44,"0.11.0":45,"0.11.1":46,"0.11.2":47,"0.11.3":48,"0.12.0":49,"0.13.0":50,"0.14.0":51,"0.14.2":52,"0.15.1":53,"0.15.4":54},"2021-07-28T13:07:08.519Z","2021-07-28T13:07:08.673Z","2021-07-28T15:13:54.824Z","2021-07-28T23:44:48.850Z","2021-07-29T13:33:16.403Z","2021-09-29T15:12:58.671Z","2021-10-04T20:54:42.316Z","2021-11-30T10:07:18.783Z","2021-12-15T23:57:32.040Z","2022-01-24T13:48:36.610Z","2022-02-02T22:31:44.348Z","2022-03-08T10:52:31.558Z","2022-05-19T19:14:44.843Z","2022-06-21T07:01:29.528Z","2022-06-21T07:32:18.849Z","2022-07-19T12:13:24.843Z","2022-12-15T12:13:33.020Z","2023-01-09T08:15:30.996Z","2023-05-31T10:29:08.336Z","2023-09-14T10:03:55.736Z","2024-07-01T07:02:18.749Z","2025-03-22T19:50:11.190Z","2025-09-27T14:19:11.458Z","Apache-2.0","alexandrainst",[58],{"name":59,"path":60,"url":61,"downloadUrl":62,"flow":63},"flow","examples\u002Fflow.json","https:\u002F\u002Fgithub.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql\u002Fblob\u002Fmain\u002Fexamples\u002Fflow.json","https:\u002F\u002Fraw.githubusercontent.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql\u002Fmain\u002Fexamples\u002Fflow.json","[{\"id\":\"36d7a2e7.38e4de\",\"type\":\"inject\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Start\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payloadType\":\"date\",\"x\":190,\"y\":1620,\"wires\":[[\"1b00f74dc3098005\"]]},{\"id\":\"ee38d447.1c13a8\",\"type\":\"debug\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Done\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":true,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"complete\",\"statusType\":\"msg\",\"x\":1210,\"y\":1620,\"wires\":[]},{\"id\":\"12f229bfef5ad2a5\",\"type\":\"function\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Ready for next lines\",\"func\":\"return [\\n    msg.complete || msg.abort ? msg : null,\\n    { tick: true },\\n];\\n\",\"outputs\":2,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":980,\"y\":1560,\"wires\":[[\"ee38d447.1c13a8\"],[\"1b00f74dc3098005\"]]},{\"id\":\"178252a8d3c54b16\",\"type\":\"function\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"\",\"func\":\"let payload = `(0, FALSE),`;\\nif (msg.payload \\u0026\\u0026 msg.payload.length \\u003e 0) {\\n    for (const line of msg.payload) {\\n        const valid = 'TRUE'; \u002F\u002F Call some kind of test\\n        payload += `(${line['id']}, ${valid}),`;\\n    }\\n}\\nmsg.payload = payload.slice(0, - 1);\\nreturn msg;\\n\",\"outputs\":1,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":560,\"y\":1620,\"wires\":[[\"6d2073ec4db26f2f\"]]},{\"id\":\"4fd30ba36702842a\",\"type\":\"debug\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Progress\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":true,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"parts.index\",\"statusType\":\"msg\",\"x\":940,\"y\":1620,\"wires\":[]},{\"id\":\"1b00f74dc3098005\",\"type\":\"postgresql\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"SELECT many\",\"query\":\"SELECT * FROM mytable\\nORDER BY id ASC\\nLIMIT 2000;\\n\",\"postgreSQLConfig\":\"20ae1e52d1eef983\",\"split\":true,\"rowsPerMsg\":\"100\",\"outputs\":1,\"x\":380,\"y\":1620,\"wires\":[[\"178252a8d3c54b16\"]]},{\"id\":\"6d2073ec4db26f2f\",\"type\":\"postgresql\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"UPDATE many\",\"query\":\"UPDATE mytable AS c\\nSET validity = v.validity\\nFROM (VALUES\\n\\t{{{ msg.payload }}}\\n) AS v (id, validity)\\nWHERE v.id = c.id;\\n\",\"postgreSQLConfig\":\"20ae1e52d1eef983\",\"split\":false,\"rowsPerMsg\":\"1\",\"outputs\":1,\"x\":740,\"y\":1620,\"wires\":[[\"12f229bfef5ad2a5\",\"4fd30ba36702842a\"]]},{\"id\":\"64a657de3954a4b5\",\"type\":\"debug\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Results\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":true,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"pgsql.rowCount\",\"statusType\":\"msg\",\"x\":560,\"y\":1700,\"wires\":[]},{\"id\":\"adf069475c5e0ba3\",\"type\":\"postgresql\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"SELECT\",\"query\":\"SELECT * FROM mytable\\nWHERE id \\u003c 100;\\n\",\"postgreSQLConfig\":\"20ae1e52d1eef983\",\"split\":false,\"rowsPerMsg\":\"1\",\"outputs\":1,\"x\":360,\"y\":1700,\"wires\":[[\"64a657de3954a4b5\"]]},{\"id\":\"3134bfc0f12e13c3\",\"type\":\"inject\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Start\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payloadType\":\"date\",\"x\":190,\"y\":1700,\"wires\":[[\"adf069475c5e0ba3\"]]},{\"id\":\"d04c65ee97e3a273\",\"type\":\"inject\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Prepare\",\"props\":[{\"p\":\"payload\"},{\"p\":\"topic\",\"vt\":\"str\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"onceDelay\":0.1,\"topic\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":1520,\"wires\":[[\"82b7c689d6682f72\"]]},{\"id\":\"c5f0b4b2442e3137\",\"type\":\"debug\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"Done\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":true,\"complete\":\"true\",\"targetType\":\"full\",\"statusVal\":\"pgsql\",\"statusType\":\"msg\",\"x\":550,\"y\":1520,\"wires\":[]},{\"id\":\"82b7c689d6682f72\",\"type\":\"postgresql\",\"z\":\"6bd3da1a.7e2b84\",\"name\":\"ADD COLUMN\",\"query\":\"ALTER TABLE mytable\\n    DROP COLUMN IF EXISTS validity;\\n\\nALTER TABLE mytable\\n    ADD COLUMN validity BOOLEAN;\\n\",\"postgreSQLConfig\":\"20ae1e52d1eef983\",\"split\":false,\"rowsPerMsg\":\"10\",\"outputs\":1,\"x\":380,\"y\":1520,\"wires\":[[\"c5f0b4b2442e3137\"]]},{\"id\":\"20ae1e52d1eef983\",\"type\":\"postgreSQLConfig\",\"name\":\"myuser@timescale:5432\u002Fiot\",\"host\":\"timescale\",\"hostFieldType\":\"str\",\"port\":\"5432\",\"portFieldType\":\"num\",\"database\":\"iot\",\"databaseFieldType\":\"str\",\"ssl\":\"false\",\"sslFieldType\":\"bool\",\"max\":\"10\",\"maxFieldType\":\"num\",\"idle\":\"1000\",\"idleFieldType\":\"num\",\"connectionTimeout\":\"10000\",\"connectionTimeoutFieldType\":\"num\",\"user\":\"myuser\",\"userFieldType\":\"str\",\"password\":\"???\",\"passwordFieldType\":\"str\"}]","\u003Ch1 id=\"node-red-contrib-postgresql\">\u003Ca class=\"header-anchor\" href=\"#node-red-contrib-postgresql\">node-red-contrib-postgresql\u003C\u002Fa>\u003C\u002Fh1>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql\">node-red-contrib-postgresql\u003C\u002Fa>\nis a \u003Ca href=\"https:\u002F\u002Fnodered.org\u002F\">\u003Cstrong>Node-RED\u003C\u002Fstrong>\u003C\u002Fa> node to query a \u003Ca href=\"https:\u002F\u002Fwww.postgresql.org\u002F\">\u003Cstrong>PostgreSQL\u003C\u002Fstrong>\u003C\u002Fa> 🐘 database.\u003C\u002Fp>\n\u003Cp>It supports \u003Cem>splitting\u003C\u002Fem> the resultset and \u003Cem>backpressure\u003C\u002Fem> (flow control), to allow working with large datasets.\u003C\u002Fp>\n\u003Cp>It supports \u003Cem>parameterized queries\u003C\u002Fem> and \u003Cem>multiple queries\u003C\u002Fem>.\u003C\u002Fp>\n\u003Ch2 id=\"outputs\">\u003Ca class=\"header-anchor\" href=\"#outputs\">Outputs\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The response (rows) is provided in \u003Ccode>msg.payload\u003C\u002Fcode> as an array.\u003C\u002Fp>\n\u003Cp>An exception is if the \u003Cem>Split results\u003C\u002Fem> option is enabled and the \u003Cem>Number of rows per message\u003C\u002Fem> is set to \u003Cstrong>1\u003C\u002Fstrong>,\nthen \u003Ccode>msg.payload\u003C\u002Fcode> is not an array but the single-row response.\u003C\u002Fp>\n\u003Cp>Additional information is provided as \u003Ccode>msg.pgsql.rowCount\u003C\u002Fcode> and \u003Ccode>msg.pgsql.command\u003C\u002Fcode>.\nSee the \u003Ca href=\"https:\u002F\u002Fnode-postgres.com\u002Fapis\u002Fresult\">underlying documentation\u003C\u002Fa> for details.\u003C\u002Fp>\n\u003Cp>In the case of multiple queries, then \u003Ccode>msg.pgsql\u003C\u002Fcode> is an array.\u003C\u002Fp>\n\u003Ch2 id=\"inputs\">\u003Ca class=\"header-anchor\" href=\"#inputs\">Inputs\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"sql-query-template\">\u003Ca class=\"header-anchor\" href=\"#sql-query-template\">SQL query template\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>This node uses the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjanl\u002Fmustache.js\">Mustache template system\u003C\u002Fa> to generate queries based on the message:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- INTEGER id column\nSELECT * FROM table WHERE id = {{{ msg.id }}};\n\n-- TEXT id column\nSELECT * FROM table WHERE id = '{{{ msg.id }}}';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"dynamic-sql-queries\">\u003Ca class=\"header-anchor\" href=\"#dynamic-sql-queries\">Dynamic SQL queries\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>As an alternative to using the query template above, this node also accepts an SQL query via the \u003Ccode>msg.query\u003C\u002Fcode> parameter.\u003C\u002Fp>\n\u003Ch3 id=\"parameterized-query-numeric\">\u003Ca class=\"header-anchor\" href=\"#parameterized-query-numeric\">Parameterized query (numeric)\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Parameters for parameterized queries can be passed as a parameter array \u003Ccode>msg.params\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F In a function, provide parameters for the parameterized query\nmsg.params = [ msg.id ];\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- In this node, use a parameterized query\nSELECT * FROM table WHERE id = $1;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"named-parameterized-query\">\u003Ca class=\"header-anchor\" href=\"#named-parameterized-query\">Named parameterized query\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>As an alternative to numeric parameters,\nnamed parameters for parameterized queries can be passed as a parameter object \u003Ccode>msg.queryParameters\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F In a function, provide parameters for the named parameterized query\nmsg.queryParameters.id = msg.id;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- In this node, use a named parameterized query\nSELECT * FROM table WHERE id = $id;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cem>Note\u003C\u002Fem>: named parameters are not natively supported by PostgreSQL, and this library just emulates them,\nso this is less robust than numeric parameters.\u003C\u002Fp>\n\u003Ch3 id=\"dynamic-postgresql-connection-parameters\">\u003Ca class=\"header-anchor\" href=\"#dynamic-postgresql-connection-parameters\">Dynamic PostgreSQL connection parameters\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>If the information about which database server to connect and how needs to be dynamic,\nit is possible to pass a \u003Ca href=\"https:\u002F\u002Fnode-postgres.com\u002Fapis\u002Fclient\">custom client configuration\u003C\u002Fa> in the message:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">msg.pgConfig = {\n  user?: string, \u002F\u002F default process.env.PGUSER || process.env.USER\n  password?: string, \u002F\u002For function, default process.env.PGPASSWORD\n  host?: string, \u002F\u002F default process.env.PGHOST\n  database?: string, \u002F\u002F default process.env.PGDATABASE || process.env.USER\n  port?: number, \u002F\u002F default process.env.PGPORT\n  connectionString?: string, \u002F\u002F e.g. postgres:\u002F\u002Fuser:password@host:5432\u002Fdatabase\n  ssl?: any, \u002F\u002F passed directly to node.TLSSocket, supports all tls.connect options\n  types?: any, \u002F\u002F custom type parsers\n  statement_timeout?: number, \u002F\u002F number of milliseconds before a statement in query will time out, default is no timeout\n  query_timeout?: number, \u002F\u002F number of milliseconds before a query call will timeout, default is no timeout\n  application_name?: string, \u002F\u002F The name of the application that created this Client instance\n  connectionTimeoutMillis?: number, \u002F\u002F number of milliseconds to wait for connection, default is no timeout\n  idle_in_transaction_session_timeout?: number, \u002F\u002F number of milliseconds before terminating any session with an open idle transaction, default is no timeout\n};\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>However, this does not use a \u003Ca href=\"https:\u002F\u002Fnode-postgres.com\u002Ffeatures\u002Fpooling\">connection pool\u003C\u002Fa>, and is therefore less efficient.\nIt is therefore recommended in most cases not to use \u003Ccode>msg.pgConfig\u003C\u002Fcode> at all and instead stick to the built-in configuration node.\u003C\u002Fp>\n\u003Ch2 id=\"installation\">\u003Ca class=\"header-anchor\" href=\"#installation\">Installation\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"using-the-node-red-editor\">\u003Ca class=\"header-anchor\" href=\"#using-the-node-red-editor\">Using the Node-RED Editor\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>You can install \u003Ca href=\"https:\u002F\u002Fflows.nodered.org\u002Fnode\u002Fnode-red-contrib-postgresql\">\u003Cstrong>node-red-contrib-postgresql\u003C\u002Fstrong>\u003C\u002Fa> directly using the editor:\nSelect \u003Cem>Manage Palette\u003C\u002Fem> from the menu (top right), and then select the \u003Cem>Install\u003C\u002Fem> tab in the palette.\u003C\u002Fp>\n\u003Ch3 id=\"using-npm\">\u003Ca class=\"header-anchor\" href=\"#using-npm\">Using npm\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>You can alternatively install the \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnode-red-contrib-postgresql\">npm-packaged node\u003C\u002Fa>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Locally within your user data directory (by default, \u003Ccode>$HOME\u002F.node-red\u003C\u002Fcode>):\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-sh\">cd $HOME\u002F.node-red\nnpm i node-red-contrib-postgresql\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>or globally alongside Node-RED:\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-sh\">npm i -g node-red-contrib-postgresql\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You will then need to restart Node-RED.\u003C\u002Fp>\n\u003Ch2 id=\"backpressure\">\u003Ca class=\"header-anchor\" href=\"#backpressure\">Backpressure\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>This node supports \u003Cem>backpressure\u003C\u002Fem> \u002F \u003Cem>flow control\u003C\u002Fem>:\nwhen the \u003Cem>Split results\u003C\u002Fem> option is enabled, it waits for a \u003Cem>tick\u003C\u002Fem> before releasing the next batch of lines,\nto make sure the rest of your Node-RED flow is ready to process more data\n(instead of risking an out-of-memory condition), and also conveys this information upstream.\u003C\u002Fp>\n\u003Cp>So when the \u003Cem>Split results\u003C\u002Fem> option is enabled, this node will only output one message at first,\nand then awaits a message containing a truthy \u003Ccode>msg.tick\u003C\u002Fcode> before releasing the next message.\u003C\u002Fp>\n\u003Cp>To make this behaviour potentially automatic (avoiding manual wires), this node declares its ability by exposing a truthy \u003Ccode>node.tickConsumer\u003C\u002Fcode>\nfor downstream nodes to detect this feature, and a truthy \u003Ccode>node.tickProvider\u003C\u002Fcode> for upstream nodes.\nLikewise, this node detects upstream nodes using the same back-pressure convention, and automatically sends ticks.\u003C\u002Fp>\n\u003Ch3 id=\"example-of-flow\">\u003Ca class=\"header-anchor\" href=\"#example-of-flow\">Example of flow\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Example adding a new column in a table, then streaming (split) many lines from that table, batch-updating several lines at a time,\nthen getting a sample consisting of a few lines:\u003C\u002Fp>\n\u003Cp>Example: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql\u002Fblob\u002Fmaster\u002Fexamples\u002Fflow.json\">flow.json\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Falexandrainst\u002Fnode-red-contrib-postgresql\u002Fmaster\u002Fexamples\u002Fflow.png\" alt=\"Node-RED flow\" \u002F>\u003C\u002Fp>\n\u003Cp>The \u003Cem>debug\u003C\u002Fem> nodes illustrate some relevant information to look at.\u003C\u002Fp>\n\u003Ch2 id=\"sequences-for-split-results\">\u003Ca class=\"header-anchor\" href=\"#sequences-for-split-results\">Sequences for split results\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>When the \u003Cem>Split results\u003C\u002Fem> option is enabled (streaming), the messages contain some information following the\nconventions for \u003Ca href=\"https:\u002F\u002Fnodered.org\u002Fdocs\u002Fuser-guide\u002Fmessages#message-sequences\">\u003Cem>messages sequences\u003C\u002Fem>\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">{\n  payload: '...',\n  parts: {\n    id: 0.1234, \u002F\u002F sequence ID, randomly generated (changes for every sequence)\n    index: 5, \u002F\u002F incremented for each message of the same sequence\n    count: 6, \u002F\u002F total number of messages; only available in the last message of a sequence\n    parts: {}, \u002F\u002F optional upstream parts information\n  },\n  complete: true, \u002F\u002F True only for the last message of a sequence\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"credits\">\u003Ca class=\"header-anchor\" href=\"#credits\">Credits\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Major rewrite in July 2021 by \u003Ca href=\"https:\u002F\u002Falexandra.dk\u002Falexandre.alapetite\">Alexandre Alapetite\u003C\u002Fa> (\u003Ca href=\"https:\u002F\u002Falexandra.dk\">Alexandra Institute\u003C\u002Fa>),\nof parents forks:\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fandreabat\u002Fnode-red-contrib-postgrestor\">andreabat\u003C\u002Fa> \u002F\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdoing-things-with-node-red\u002Fnode-red-contrib-postgrestor\">ymedlop\u003C\u002Fa> \u002F\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FHySoaKa\u002Fnode-red-contrib-postgrestor\">HySoaKa\u003C\u002Fa>,\nwith inspiration from \u003Ca href=\"https:\u002F\u002Fflows.nodered.org\u002Fnode\u002Fnode-red-contrib-re-postgres\">node-red-contrib-re-postgres\u003C\u002Fa>\n(\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Felmagopy\u002Fnode-red-contrib-re2-postgres\">code\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>This node builds uppon the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbrianc\u002Fnode-postgres\">node-postgres\u003C\u002Fa> (\u003Ccode>pg\u003C\u002Fcode>) library.\u003C\u002Fp>\n\u003Cp>Contributions and collaboration welcome.\u003C\u002Fp>\n",1784738654077]