JavaScript Sinusbot PostgreSQL\ 错误:pq:对于字符类型来说值太长

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

SinusBot 1.0.0-beta.10-202ee4d

Ubuntu 服务器 20.04.1 LTS

psql 控制台视图

Pastebin: 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]我没有得到解决方案,但我关闭了这个线程,因为我发现了另一个问题。


潇湘沐
浏览 130回答 1
1回答

交互式爱情

不要这样做:dbc.exec("INSERT INTO ip_logs(ip_id, nickname, ip_adress) VALUES ((SELECT max(ip_id)+1 FROM ip_logs), ?, ?)", nick, ip);永远不要像这样计算下一个 id。它不可扩展并且可能导致竞争条件。请改用序列。这失败了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')");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript