首页 > 解决方案 > JavaScript Sinusbot PostgreSQL\ 错误:pq: value too long for type character(1)

问题描述

我的脚本有问题:错误:pq: value too long for type character(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 控制台中正常工作。我在谷歌搜索,但我没有得到有用的信息。

SinusBot 1.0.0-beta.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] 我没有得到解决方案,但我关闭了这个帖子,因为我发现了另一个问题。

标签: javascriptpostgresql

解决方案


  1. 不要这样做:
dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress)
VALUES ((SELECT max(ip_id)+1 FROM ip_logs), ?, ?)", nick, ip);

永远不要这样计算下一个 id。它不可扩展并且可能导致竞争条件。请改用序列。

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

推荐阅读