【问题标题】:Postgres ts_vectorPostgres tsvector
【发布时间】:2014-08-06 00:59:13
【问题描述】:

我正在使用带有 Nodejs 的 Seqeulize。

我的表名是“Users”,它有一列“userName”。我已将 ts 向量列命名为 userNameVector。在尝试创建列并设置触发器时,我不断收到错误“errorMissingColumn”。

显然它告诉我我的列“用户名”不存在,但我检查了三次,它确实存在。

来自节点控制台的日志如下:

Executing (default): ALTER TABLE "Users" ADD COLUMN "userNameVector" TSVECTOR
Executing (default): UPDATE "Users" SET "userNameVector" = to_tsvector('english', userName)
Executing (default): CREATE INDEX userName_search_idx ON "Users" USING gin("userNameVector");
Executing (default): CREATE TRIGGER userName_vector_update BEFORE INSERT OR UPDATE ON "Users" FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger("userNameVector", 'pg_catalog.english', userName)
{ [Error: column "username" does not exist]
  severity: 'ERROR',
  code: '42703',
  position: '62',
  file: 'parse_relation.c',
  line: '2655',
  routine: 'errorMissingColumn',
  sql: 'UPDATE "Users" SET "userNameVector" = to_tsvector(\'english\', userName)' }

【问题讨论】:

  • 你应该在 Postgres 中使用 snake_case。

标签: postgresql full-text-search identifier quoting


【解决方案1】:

看起来像是另一个被误导的 CaMeL 案例名称。

默认情况下,Postgres 标识符是小写的。如果您使用非标准名称(合法,全部小写)并在创建时将它们双引号,那么您必须在它们的余生中双引号。所以:

"userName" 而不是userName

相关:

【讨论】:

  • 非常感谢欧文。我是 postgres 的新手...不知道!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 2015-02-11
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多