Etherpad-lite: Postgres backend - error: kolom "nilai" berjenis jsonb tetapi ekspresi berjenis teks

Dibuat pada 8 Sep 2020  ·  29Komentar  ·  Sumber: ether/etherpad-lite

Jelaskan bugnya
Skema tidak cocok saat melakukan segala jenis penyisipan.

error: kolom "nilai" berjenis jsonb tetapi ekspresi berjenis teks

Untuk Mereproduksi
Gunakan sumber dan postgres terbaru. Mencoba dengan v12 dan v13.

Perilaku yang diharapkan
Untuk melakukan penyisipan tanpa kesalahan.

Screenshot
etherpad_1 | [08-09-2020 20: 37: 50.541] Konsol [ERROR] - kesalahan: kolom "nilai" berjenis jsonb tetapi ekspresi berjenis teks
etherpad_1 | di Parser.parseErrorMessage (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/parser.js:278:15)
etherpad_1 | di Parser.handlePacket (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/parser.js:126:29)
etherpad_1 | di Parser.parse (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/parser.js:39:38)
etherpad_1 | di Socket.stream.on (/opt/etherpad-lite/src/node_modules/pg-protocol/dist/index.js:8:42)
etherpad_1 | di Socket.emit (events.js: 198: 13)
etherpad_1 | di Socket.EventEmitter.emit (domain.js: 448: 20)
etherpad_1 | di addChunk (_stream_readable.js: 288: 12)
etherpad_1 | di readableAddChunk (_stream_readable.js: 269: 11)
etherpad_1 | di Socket.Readable.push (_stream_readable.js: 224: 10)
etherpad_1 | di TCP.onStreamRead [sebagai onread] (internal / stream_base_commons.js: 94: 17)

Desktop (lengkapi informasi berikut):
NA

Smartphone (harap lengkapi informasi berikut):
NA

Konteks tambahan
Ini telah diuji dengan kontainer buruh pelabuhan.

Serious Bug

Komentar yang paling membantu

Terima kasih @JohnMcLear , menjalankan perintah berikut membuatnya berfungsi kembali:

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

Semua 29 komentar

Ini sebagian besar merupakan masalah di mana saya menggunakan sumber terbaru ketika saya seharusnya menggunakan rilis.

Saya sudah mencoba ini dengan 1.8.4 dan dapat mengonfirmasi bahwa saya tidak mendapatkan kesalahan ini. Saya telah memperbarui masalah tersebut.

Kecuali 1.8.5 tidak menyertakan bug ini, jadi ups.

Diperbaiki di c8361a211a1e6bfbbc006933f48d48ca51857c71

Diperbaiki di c8361a2

Saya masih mengerti.

image

Apakah Anda melakukan git pull lalu bin / run.sh?

Anda perlu memperbarui ueber dan bin / run.sh akan melakukannya. Jangan gunakan fastrun

Ya, saya selalu mendapatkan bin/run.sh .
Ini diperbarui menjadi "ueberdb2": "^0.5.2"

Screenshot_20200910_103721

Tes berjalan dengan baik.

Bisakah Anda mencoba pg dB plz baru? Saya ingin melihat apakah komit sebelumnya merusak database Anda.

Bisakah Anda mencoba pg dB plz baru? Saya ingin melihat apakah komit sebelumnya merusak database Anda.

tentu, biarkan aku mencoba.

Bisakah Anda mencoba pg dB plz baru? Saya ingin melihat apakah komit sebelumnya merusak database Anda.

Sebenarnya, karena lingkungan pengembang saya, saya mendapatkan pg db baru di setiap bangunan.
image
image

Kemudian konfigurasi Peep Travis untuk melihat bagaimana kita membuat database untuk tes ueberdb. Anda pasti ingin repo ueber dB tidak ada di sini

Apakah sepertinya kita harus menggunakan repo di bawah ini?
https://github.com/ether/ueberDB#dirtyref

dirtyref digabungkan menjadi master. Gunakan master

Hai, saya juga mengalami masalah ini di 1.8.5. Dapatkah Anda membuka kembali masalah ini hingga solusi ditemukan? (jadi lebih mudah menemukannya!)
Terima kasih!

cc @

Saya masih memiliki masalah ini bahkan mengubah ke repo https://github.com/ether/ueberDB (master)

image

Sama disini:

  • Bantalan tidak dimuat (baik "Memuat…" atau 502 abadi)
  • Server gagal setiap jam dengan pengecualian ini:
[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: Ubuntu 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
  • Skema 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);

Saya mengambil jalan memutar balik. Saya mencoba mengembalikan etherpad ke 1.8.4 tetapi tidak berhasil:

[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.

Jadi saya juga memulihkan pgsql dump dan sekarang 1.8.4 berfungsi kembali (yang sebenarnya tidak mengejutkan karena berfungsi dengan baik).

alasan: dari 1.8.4 menjadi 1.8.5 nilai kolom diubah dari tipe teks menjadi jsonb.
Harus rilis besar ...

Apakah ada skrip migrasi yang dapat diterapkan?

Saya hanya akan mengembalikan komitmen ini. Ini semua IMHO ditangani dengan buruk.

Log perubahan mengatakan "PENTING: Ini memperbaiki masalah yang parah dengan postgresql di 1.8.5" untuk 1.8.6, tetapi saya telah meningkatkan dan masih mendapatkan pengecualian yang disebutkan di atas. Saya sekarang memperhatikan pengecualian ini juga, yang merupakan output segera setelah layanan dimulai ulang:

[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 apakah database Anda berubah atau sesuatu? Jika Anda memulai tarble / database baru apakah semuanya baik-baik saja?

@JohnMcLear Saat memulai ulang Etherpad 1.8.6 dengan database kosong, skema baru dibuat dan tampaknya berfungsi tanpa pengecualian.

Ketika saya membandingkan skema baru dengan yang lama, saya mendapatkan yang berikut:

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
 );

Jadi pertanyaannya adalah: Kapan jenis kolom telah berubah dan bagaimana cara memigrasi / mengembalikannya?

Saya mengonfigurasi pembaruan otomatis untuk instance Etherpad saya dari cabang master.

@ c7hm4r @qsuscs adalah penulis komit yang melanggar. Saya berharap dia mengambil tanggung jawab di sini dan membantu :)

https://github.com/ether/ueberDB/commit/b9e786e2c8753f4cbbe09d3695a92a1a03904ead#diff -f1b8245dd259fa912c33cb2db527f609R31 adalah pernyataan perubahan ..

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

Seseorang akan menganggap mengubah jsonb menjadi teks akan melakukannya?

Terima kasih @JohnMcLear , menjalankan perintah berikut membuatnya berfungsi kembali:

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

@ c7hm4r jangan khawatir, semoga beberapa orang yang

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

kpcyrd picture kpcyrd  ·  8Komentar

muxator picture muxator  ·  7Komentar

julpec picture julpec  ·  9Komentar

wbt picture wbt  ·  7Komentar

zeer15398376 picture zeer15398376  ·  9Komentar