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.
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.
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"
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.
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
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)
Sama disini:
[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)
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" }
]
}
}
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
Komentar yang paling membantu
Terima kasih @JohnMcLear , menjalankan perintah berikut membuatnya berfungsi kembali: