JavaScript Sinusbot PostgreSQL\ ошибка: pq: значение слишком длинное для символьного типа (1)

У меня проблема с моим скриптом: ошибка: pq: значение слишком длинное для символа типа(1)

Моя таблица построена так:

    CREATE TABLE ip_logs (
      ip_id INT PRIMARY KEY,
      nickname TEXT NOT NULL, 
      ip_adress TEXT NOT NULL);

Мой сценарий:

    dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES ((SELECT max(ip_id)+1 FROM ip_logs), ?, ?)", nick, ip);

и

    dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES ('20', 'test', 'test')");

dbc реализован так:

var dbc = db.connect({ driver: 'postgres', host: ip_db, username: login_db, password: password_db, database: 'ip_log' }...

Второй скрипт корректно работает в консоли psql. Я искал в Google, но я не получил полезную информацию.

SinusBot 1.0.0-бета.10-202ee4d

Сервер Ubuntu 20.04.1 LTS

вид консоли psql

Пастебин: https://pastebin.com/YjX3FHrS

[Изменить 1] Я пытался:

dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES (20, 'test', 'test')");

Выдает ту же ошибку :/

[Изменить 2]

Я использовал это: dbc.exec("INSERT INTO ip_logs(ip_id) VALUES (20)"); и измененная таблица - теперь она без параметра NOT NULL и работает корректно. В чем проблема вставить другие данные?

[Изменить 3] Я не нашел решения, но я закрыл эту тему, потому что нашел другую проблему.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Не делайте этого:
dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress)
VALUES ((SELECT max(ip_id)+1 FROM ip_logs), ?, ?)", nick, ip);

Никогда не вычисляйте следующий идентификатор таким образом. Это не масштабируется и может привести к условиям гонки. Вместо этого используйте последовательность.

  1. Это не удалось
dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES ('20', 'test', 'test')");

вероятно, потому что ip_id является целым числом, так что это должно работать:

dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES (20, 'test', 'test')");

С консолью psql моя версия работает правильно, я добавлю ss в основной поток. Я проверил несколько решений и не нашел :( Обязательно проверю ваш код и дам вам отзыв.

Zarezerwowany 18.12.2020 12:02

Я изменил на ваш код, и у меня все еще та же ошибка :(

Zarezerwowany 18.12.2020 12:06

@Zarezerwowany Вы уверены, что используете PostgreSQL и что таблица была определена, как написано выше?

Jonathan Jacobson 18.12.2020 12:35

Да, я уверен. Я удалил таблицу, и скрипт вызвал ошибку о том, что таблицы нет, а затем я создал новую таблицу, и произошла та же ошибка. Извините за мой английский, если вы не понимаете, просто напишите :) Редактировать 1: вы можете проверить ss под названием «представление консоли psql» в основном потоке

Zarezerwowany 18.12.2020 12:38

@Zarezerwwany Как узнать, какая строка вызывает ошибку?

Jonathan Jacobson 18.12.2020 12:42

Я думаю, проблема в dbc.exec, потому что я могу запустить его вручную на консоли сервера, но скрипт выдает ошибку. Я только нашел в google проблему с переменным (255), и речь шла об отправке данных больше 255. Здесь похоже, что максимальные данные могут быть отправлены с 1 длиной (?), И я не знаю, так это или нет. Редактировать 1: это было вызвано тем, что они использовали «char» вместо «text»

Zarezerwowany 18.12.2020 12:48

Кажется, это не связано с этой таблицей + операторами вставки. Есть ли в вашем сценарии какие-либо другие операторы SQL.

Jonathan Jacobson 18.12.2020 12:50

Все остальные утверждения комментируются. Я могу дать вам весь скрипт на pastebin Edit 1: pastebin.com/YjX3FHrS

Zarezerwowany 18.12.2020 12:51

Я использовал это: dbc.exec("ВСТАВИТЬ В ip_logs(ip_id) VALUES (20)"); Я изменил таблицу - теперь она без NOT NULL и правильно вставила данные.

Zarezerwowany 18.12.2020 13:09

Я нашел вещь: я могу вставить данные из 2 символов, но 3 выдает эту ошибку. У тебя есть какие-нибудь идеи об этом? dbc.exec("ВСТАВИТЬ В ip_logs(ip_id, псевдоним) ЗНАЧЕНИЯ (126, 'abc')"); ошибка, dbc.exec("ВСТАВИТЬ В ip_logs(ip_id, псевдоним) ЗНАЧЕНИЯ (126, 'ab')"); хорошо

Zarezerwowany 18.12.2020 15:10

Другие вопросы по теме