Etherpad-lite: рдкреЛрд╕реНрдЯрдЧреНрд░реИрдбреНрд╕ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб - рдПрд░рд░: рдХреЙрд▓рдо "рд╡реИрд▓реНрдпреВ" рдЯрд╛рдЗрдк рдЬреЛрдВрд╕рдм рдХрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рд╕рд┐рддре░ 2020  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ether/etherpad-lite

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рд╕реНрдХреАрдорд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рдмреЗрдореЗрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐: рд╕реНрддрдВрдн "рдорд╛рди" рдкреНрд░рдХрд╛рд░ jsonb рдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рда рдХреА рд╣реИ

рдкреНрд░рдЬрдирди рдХрд░рдирд╛
рдирд╡реАрдирддрдо рд╕реНрд░реЛрдд рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред V12 рдФрд░ v13 рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
etherpad_1 | [реирежреиреж-режреп -реж: реиреж: рей 50: релреж.релрекрез] [ERROR] рдХрдВрд╕реЛрд▓ - рдПрд░рд░: рдХреЙрд▓рдо "рд╡реИрд▓реНрдпреВ" рдЯрд╛рдЗрдк рдЬреЛрдВрд╕рдм рдХрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╣реИ
etherpad_1 | Parser.parseErrorMessage (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/parser.js:278:15) рдкрд░
etherpad_1 | Parser.handlePacket (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/parser.js:126:29) рдкрд░
etherpad_1 | Parser.parse (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/parser.js:39:38) рдкрд░
etherpad_1 | Socket.stream.on (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/index.js:8:42) рдкрд░
etherpad_1 | рд╕реЙрдХреЗрдЯ.рдорд┐рдЯ рдкрд░ (рдИрд╡реЗрдВрдЯ .js: 198: 13)
etherpad_1 | рд╕реЙрдХреЗрдЯ рдкрд░ред EventEmitter.emit (domain.js: 448: 20)
etherpad_1 | addChunk рдкрд░ (_stream_readable.js: 288: 12)
etherpad_1 | рдкрдардиреАрдпрдЕрдбрдХрдВрдХ рдкрд░ (_stream_readable.js: 269: 11)
etherpad_1 | рд╕реЙрдХреЗрдЯ рдкрд░ред Rableable.push (_stream_readable.js: 224: 10)
etherpad_1 | TCP.onStreamRead [as onread] (рдЖрдВрддрд░рд┐рдХ / stream_base_commons.js: 94: 17)

рдбреЗрд╕реНрдХрдЯреЙрдк (рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реА рдХрд░реЗрдВ):
рдирд╛

рд╕реНрдорд╛рд░реНрдЯрдлреЛрди (рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реА рдХрд░реЗрдВ):
рдирд╛

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн
рдпрд╣ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдзрдиреНрдпрд╡рд╛рдж @JohnMcLear , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

alter table "store" alter column "value" type text;

рд╕рднреА 29 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдирд╡реАрдирддрдо рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬрдм рдореБрдЭреЗ рдПрдХ рд░рд┐рд▓реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдореИрдВрдиреЗ рдЗрд╕реЗ 1.8.4 рдХреЗ рд╕рд╛рде рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред рдореИрдВрдиреЗ рдЙрд╕реА рд╣рд┐рд╕рд╛рдм рд╕реЗ рдореБрджреНрджреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

1.8.5 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЗрд╕ рдмрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реВрдкреНрд╕ред

C8361a211a1e6bfbcc006933f48d48ca51857c71 рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб

C8361a2 рдореЗрдВ рддрдп рдХрд┐рдпрд╛

рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣ рдорд┐рд▓рддрд╛ рд╣реИред

image

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкреБрд▓ рдХрд┐рдпрд╛ рддреЛ рдмрд┐рди / рд░рди.рд╢?

рдЖрдкрдХреЛ ueber рдФрд░ bin / run рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╣ рдХрд░реЗрдЧрд╛ред рдлрд╛рд╕реНрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ

рд╣рд╛рдБ, рдореИрдВ рд╣рдореЗрд╢рд╛ bin/run.sh ред
рдЗрд╕реЗ "ueberdb2": "^0.5.2" рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

Screenshot_20200910_103721

рдЯреЗрд╕реНрдЯ рдареАрдХ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдирдпрд╛ pg dB plz рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд┐рдЫрд▓реЗ рдХрдорд┐рдЯ рдиреЗ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддреЛрдбрд╝рд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдирдпрд╛ pg dB plz рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд┐рдЫрд▓реЗ рдХрдорд┐рдЯ рдиреЗ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддреЛрдбрд╝рд╛ рд╣реИред

рдпрдХреАрди рд╣реИ, рдореБрдЭреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдирдпрд╛ pg dB plz рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд┐рдЫрд▓реЗ рдХрдорд┐рдЯ рдиреЗ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддреЛрдбрд╝рд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдореЗрд░реЗ рджреЗрд╡ рдорд╛рд╣реМрд▓ рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рд╣рд░ рдмрд┐рд▓реНрдб рдкрд░ рдПрдХ рдирдпрд╛ рдкреАрдЬреА рдбреАрдмреА рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
image
image

рдлрд┐рд░ рдкреАрдк рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдХрд┐ рд╣рдо ueberdb рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ ueber dB рд░реЗрдкреЛ рдпрд╣рд╛рдВ рди рд╣реЛ

рдХреНрдпрд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдиреАрдЪреЗ рд░реЗрдкреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
https://github.com/ether/ueberDB#dirtyref

рдореИрд▓реЗрдбреНрд░реЗ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред master рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдирдорд╕реНрддреЗ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ 1.8.5 рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рддрдм рддрдХ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛? (рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ!)
рдзрдиреНрдпрд╡рд╛рдж!

cc @ рдЧрд╛рд░реЗрдб

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЗрдкреЛ https://github.com/ether/ueberDB (рдорд╛рд╕реНрдЯрд░) рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ

image

рдореБрдЭреЗ рднреА:

  • рдкреИрдб рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рддреЛ рд╢рд╛рд╢реНрд╡рдд "рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ ..." рдпрд╛ 502)
  • рд╕рд░реНрд╡рд░ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╣рд░ рдШрдВрдЯреЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
[2020-09-11 11:36:24.449] [ERROR] console - error: column "value" is of type jsonb but expression is of type text
    at Parser.parseErrorMessage (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/parser.js:278:15)
    at Parser.handlePacket (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/parser.js:126:29)
    at Parser.parse (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/parser.js:39:38)
    at Socket.<anonymous> (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/index.js:8:42)
    at Socket.emit (events.js:315:20)
    at Socket.EventEmitter.emit (domain.js:483:12)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:271:9)
    at Socket.Readable.push (_stream_readable.js:212:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
[2020-09-11 11:36:24.463] [ERROR] console - TypeError: Cannot read property 'name' of null
    at Client._handleParseComplete (/usr/local/var/etherpad/repo/src/node_modules/pg/lib/client.js:358:26)
    at Connection.emit (events.js:315:20)
    at Connection.EventEmitter.emit (domain.js:483:12)
    at /usr/local/var/etherpad/repo/src/node_modules/pg/lib/connection.js:109:12
    at Parser.parse (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/parser.js:40:17)
    at Socket.<anonymous> (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/index.js:8:42)
    at Socket.emit (events.js:315:20)
    at Socket.EventEmitter.emit (domain.js:483:12)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:271:9)
  • OS: рдЙрдмрдВрдЯреВ 18.04
  • settings.json :
{
  "dbSettings" : {
                   "user"    : "etherpad",
                   "host"    : "localhost",
                   "port"    : 5432,
                   "password": "xxx",
                   "database": "etherpad",
                 },
  "padOptions": {
    "noColors":         false,
    "showControls":     true,
    "showChat":         true,
    "showLineNumbers":  true,
    "useMonospaceFont": false,
    "userName":         false,
    "userColor":        false,
    "rtl":              false,
    "alwaysShowChat":   false,
    "chatAndUsers":     false,
    "lang":             "de-de"
  },
  "suppressErrorsInPadText": false,
  "requireSession": false,
  "editOnly": true,
  "sessionNoPassword": false,
  "minify": true,
  "maxAge": 21600,
  "abiword": null,
  "soffice": null,
  "tidyHtml": null,
  "allowUnknownFileEnds": true,
  "requireAuthentication": false,
  "requireAuthorization": false,
  "trustProxy": true,
  "disableIPlogging": true,
  "automaticReconnectionTimeout": 5,
  "users": {
    "admin": {
      "hash": "xxx",
      "is_admin": true
    }
  },
  "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
  "loadTest": false,
  "exposeVersion": false,
  "loglevel": "WARN",
  "logconfig" :
    { "appenders": [
        { "type": "console" }
      ]
    }
}
  • DB: postgresql 10 + 190ubuntu0.1
  • DB рд╕реНрдХреАрдорд╛:
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
CREATE FUNCTION public.ueberdb_insert_or_update(character varying, text) RETURNS void
    LANGUAGE plpgsql
    AS $_$ BEGIN   IF EXISTS( SELECT * FROM store WHERE key = $1 ) THEN     UPDATE store SET value = $2 WHERE key = $1;   ELSE     INSERT INTO store(key,value) VALUES( $1, $2 );   END IF;   RETURN; END; $_$;
ALTER FUNCTION public.ueberdb_insert_or_update(character varying, text) OWNER TO etherpad;
CREATE FUNCTION public.ueberdb_insert_or_update_jsonb(character varying, jsonb) RETURNS void
    LANGUAGE plpgsql
    AS $_$ BEGIN   IF EXISTS( SELECT * FROM store WHERE key = $1 ) THEN     UPDATE store SET value = $2 WHERE key = $1;   ELSE     INSERT INTO store(key,value) VALUES( $1, $2 );   END IF;   RETURN; END; $_$;
ALTER FUNCTION public.ueberdb_insert_or_update_jsonb(character varying, jsonb) OWNER TO etherpad;
SET default_tablespace = '';
SET default_with_oids = false;
CREATE TABLE public.store (
    key character varying(100) NOT NULL,
    value jsonb NOT NULL
);
ALTER TABLE public.store OWNER TO etherpad;
ALTER TABLE ONLY public.store
    ADD CONSTRAINT store_pkey PRIMARY KEY (key);

рдореИрдВрдиреЗ рд░реЛрд▓рдмреИрдХ рд╕рдбрд╝рдХ рд▓реАред рдореИрдВрдиреЗ 1.8.4 рдореЗрдВ рд╕рд┐рд░реНрдл рдИрдерд░ рдХреЛ рд░реЛрд▓рдмреИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛:

[2020-09-11 20:55:44.494] [ERROR] console - JSON-PROBLEM:[object Object]
[2020-09-11 20:55:44.495] [ERROR] console - (node:1) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at /opt/etherpad-lite/src/node_modules/ueberdb2/CacheAndBufferLayer.js:169:24
    at Query.<anonymous> (/opt/etherpad-lite/src/node_modules/ueberdb2/postgres_common.js:99:5)
    at Query.handleReadyForQuery (/opt/etherpad-lite/src/node_modules/pg/lib/query.js:128:10)
    at Connection.<anonymous> (/opt/etherpad-lite/src/node_modules/pg/lib/client.js:247:19)
    at Connection.emit (events.js:198:13)
    at Connection.EventEmitter.emit (domain.js:448:20)
    at Socket.<anonymous> (/opt/etherpad-lite/src/node_modules/pg/lib/connection.js:134:12)
    at Socket.emit (events.js:198:13)
    at Socket.EventEmitter.emit (domain.js:448:20)
[2020-09-11 20:55:44.496] [ERROR] console - (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
[2020-09-11 20:55:44.496] [ERROR] console - (node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ pgsql рдбрдВрдк рдХреЛ рднреА рдмрд╣рд╛рд▓ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЕрдм 1.8.4 рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛)ред

рдХрд╛рд░рдг: рез. 1.8.рек рд╕реЗ рез. to.рел рддрдХ рдХреЙрд▓рдо рдХрд╛ рдорд╛рди рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдмрджрд▓рдХрд░ jsonb рд╣реИред
рдПрдХ рдмрдбрд╝реА рд░рд┐рд▓реАрдЬ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ...

рдХреНрдпрд╛ рдХреЛрдИ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдмрд╕ рдЗрди рдХрдореЗрдВрдЯреНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВред рдпрд╣ рд╕рдм рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ IMHO рдерд╛ред

рдкрд░рд┐рд╡рд░реНрддрди рд▓реЙрдЧ рдХрд╣рддрд╛ рд╣реИ "рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдпрд╣ 1.8.5 рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬреЗрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ" 1.8.6 рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдм рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рдкрд░ рднреА рдЧреМрд░ рдХрд┐рдпрд╛, рдЬреЛ рд╕реЗрд╡рд╛ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ:

[2020-09-19 17:47:45.482] [ERROR] console - JSON-PROBLEM:[object Object]                                    
[2020-09-19 17:47:45.496] [ERROR] console - (node:30613) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)                                                                         
    at /usr/local/var/etherpad/repo/src/node_modules/ueberdb2/lib/CacheAndBufferLayer.js:169:24
    at Query.<anonymous> (/usr/local/var/etherpad/repo/src/node_modules/ueberdb2/databases/postgres_common.js:99:5)
    at Query.handleReadyForQuery (/usr/local/var/etherpad/repo/src/node_modules/pg/lib/query.js:122:12)
    at Client._handleReadyForQuery (/usr/local/var/etherpad/repo/src/node_modules/pg/lib/client.js:281:19)
    at Connection.emit (events.js:315:20)               
    at Connection.EventEmitter.emit (domain.js:483:12)          
    at /usr/local/var/etherpad/repo/src/node_modules/pg/lib/connection.js:109:12          
    at Parser.parse (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/parser.js:40:17)      
    at Socket.<anonymous> (/usr/local/var/etherpad/repo/src/node_modules/pg-protocol/dist/index.js:8:42)
[2020-09-19 17:47:45.497] [ERROR] console - (node:30613) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)    
[2020-09-19 17:47:45.497] [ERROR] console - (node:30613) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

@ c7hm4r рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рдпрд╛ рдХреБрдЫ рдФрд░? рдпрджрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рдЯрд╛рд░рдмрд▓ / рдбреЗрдЯрд╛рдмреЗрд╕ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЪреАрдЬреЗрдВ рдареАрдХ рд╣реИрдВ?

@JohnMcLear рдЦрд╛рд▓реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде Etherpad 1.8.6 рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдкрд░, рдПрдХ рдирдпрд╛ рд╕реНрдХреАрдорд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд┐рдирд╛ рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдЬрдм рдореИрдВ рдкреБрд░рд╛рдиреЗ рд╕реНрдХреАрдо рдХреЗ рд╕рд╛рде рдирдП рд╕реНрдХреАрдорд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

diff --git a/etherpad_schema.sql b/etherpad_schema_new.sql
index 9baf5f4..ad3c08b 100644
--- a/etherpad_schema.sql
+++ b/etherpad_schema_new.sql
@@ -41,17 +41,6 @@ CREATE FUNCTION public.ueberdb_insert_or_update(character varying, text) RETURNS

 ALTER FUNCTION public.ueberdb_insert_or_update(character varying, text) OWNER TO etherpad;

---
--- Name: ueberdb_insert_or_update_jsonb(character varying, jsonb); Type: FUNCTION; Schema: public; Owner: etherpad
---
-
-CREATE FUNCTION public.ueberdb_insert_or_update_jsonb(character varying, jsonb) RETURNS void
-    LANGUAGE plpgsql
-    AS $_$ BEGIN   IF EXISTS( SELECT * FROM store WHERE key = $1 ) THEN     UPDATE store SET value = $2 WHERE key = $1;   ELSE     INSERT INTO store(key,value) VALUES( $1, $2 );   END IF;   RETURN; END; $_$;
-
-
-ALTER FUNCTION public.ueberdb_insert_or_update_jsonb(character varying, jsonb) OWNER TO etherpad;
-
 SET default_tablespace = '';

 SET default_with_oids = false;
@@ -62,7 +51,7 @@ SET default_with_oids = false;

 CREATE TABLE public.store (
     key character varying(100) NOT NULL,
-    value jsonb NOT NULL
+    value text NOT NULL
 );

рддреЛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: рдЬрдм рдХреЙрд▓рдо рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд / рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ?

рдореИрдВрдиреЗ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╕реЗ рдЕрдкрдиреЗ рдПрдерд░рдкреИрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдкрдбреЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред

@ c7hm4r @qsuscs рдЕрдкрдорд╛рдирдЬрдирдХ рдХрдорд╛рдиреЛрдВ рдХреЗ рд▓реЗрдЦрдХ рдереЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд╣ рдпрд╣рд╛рдБ рдХреБрдЫ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдорджрдж рдХрд░рддрд╛ рд╣реИ :)

https://github.com/ether/ueberDB/commit/b9e786e2c8753f4cbbe09d3695a92a1a03904ead#diff -f1b8245dd259fa912c33cb2db527f609R31 рдмрджрд▓рдиреЗ рдмрдпрд╛рди рд╣реИ ..

  var updateValueColumnType = "ALTER TABLE store " +
    "ALTER COLUMN value " +
    "TYPE jsonb " +
    "USING value::jsonb";

рдПрдХ рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдЬрдмреНрдмрди рдХреЛ рдкрд╛рда рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдзрдиреНрдпрд╡рд╛рдж @JohnMcLear , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

alter table "store" alter column "value" type text;

@ c7hm4r рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореБрдЯреНрдареА рднрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rmader picture rmader  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ljoets picture ljoets  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

muxator picture muxator  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ddeenniiss picture ddeenniiss  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zeer15398376 picture zeer15398376  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ