У меня проблема с моим скриптом: ошибка: 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
Пастебин: 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] Я не нашел решения, но я закрыл эту тему, потому что нашел другую проблему.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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')");
вероятно, потому что ip_id является целым числом, так что это должно работать:
dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES (20, 'test', 'test')");
Я изменил на ваш код, и у меня все еще та же ошибка :(
@Zarezerwowany Вы уверены, что используете PostgreSQL и что таблица была определена, как написано выше?
Да, я уверен. Я удалил таблицу, и скрипт вызвал ошибку о том, что таблицы нет, а затем я создал новую таблицу, и произошла та же ошибка. Извините за мой английский, если вы не понимаете, просто напишите :) Редактировать 1: вы можете проверить ss под названием «представление консоли psql» в основном потоке
@Zarezerwwany Как узнать, какая строка вызывает ошибку?
Я думаю, проблема в dbc.exec, потому что я могу запустить его вручную на консоли сервера, но скрипт выдает ошибку. Я только нашел в google проблему с переменным (255), и речь шла об отправке данных больше 255. Здесь похоже, что максимальные данные могут быть отправлены с 1 длиной (?), И я не знаю, так это или нет. Редактировать 1: это было вызвано тем, что они использовали «char» вместо «text»
Кажется, это не связано с этой таблицей + операторами вставки. Есть ли в вашем сценарии какие-либо другие операторы SQL.
Все остальные утверждения комментируются. Я могу дать вам весь скрипт на pastebin Edit 1: pastebin.com/YjX3FHrS
Я использовал это: dbc.exec("ВСТАВИТЬ В ip_logs(ip_id) VALUES (20)"); Я изменил таблицу - теперь она без NOT NULL и правильно вставила данные.
Я нашел вещь: я могу вставить данные из 2 символов, но 3 выдает эту ошибку. У тебя есть какие-нибудь идеи об этом? dbc.exec("ВСТАВИТЬ В ip_logs(ip_id, псевдоним) ЗНАЧЕНИЯ (126, 'abc')"); ошибка, dbc.exec("ВСТАВИТЬ В ip_logs(ip_id, псевдоним) ЗНАЧЕНИЯ (126, 'ab')"); хорошо
С консолью psql моя версия работает правильно, я добавлю ss в основной поток. Я проверил несколько решений и не нашел :( Обязательно проверю ваш код и дам вам отзыв.