javascript - 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
粘贴箱: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] 我没有得到解决方案,但我关闭了这个帖子,因为我发现了另一个问题。
解决方案
- 不要这样做:
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')");
推荐阅读
- selenium-chromedriver - 引起:java.lang.NumberFormatException:对于输入字符串:“。” 在四库里
- python - Error while selecting dependent drop down and click the option In Python
- haskell - Parsing user input string to UTCTime type
- swiftui - How to pass the value of progress in SwiftUI(maybe with combine)?
- unit-testing - Terratest - 使用模拟 AWS 服务
- java - how do test with Junit for the method AddCalcNode()?
- python - 计算任何数据文件中两位数的个数
- io - 如何为 ESP8266 选择合适的 I/O 扩展器
- regex - Invalid regular expression error in snowflake
- solr - Solr Search:使用“AND”搜索在多个字段中进行搜索