【问题标题】:Escaping column with dot in UPDATE in PostgreSQL 9.3.9在 PostgreSQL 9.3.9 中的 UPDATE 中用点转义列
【发布时间】:2020-07-24 15:02:45
【问题描述】:

我需要在 PostgreSQL 的 Jira 配置中修复几行。不幸的是,它在列中使用点表示法,我无法很好地逃避它。

select * from "cwd_directory_attribute";
directory_id |  attribute_name     | attribute_value
        1 | user_encryption_method | atlassian-security
    10000 | ldap.user.filter       | (objectclass=person)

没有转义:

psql:fix_directory.sql:1: ERROR:  column "ldap" of relation "cwd_directory_attribute" does not exist
LINE 1: update cwd_directory_attribute set ldap.basedn='ou=sandbox,d...

单引号:

psql:fix_directory.sql:1: ERROR:  syntax error at or near "'ldap.basedn'"
LINE 1: update cwd_directory_attribute set 'ldap.basedn'='ou=sandbox...

双引号: psql:fix_directory.sql:1:错误:关系“cwd_directory_attribute”的列“ldap.basedn”不存在 LINE 1:更新 cwd_directory_attribute set "ldap.basedn" ='ou=sandb...

方括号:

psql:fix_directory.sql:1: ERROR:  syntax error at or near "["
LINE 1: update cwd_directory_attribute set [ldap.basedn]  ='ou=sandb...

例如

update cwd_directory_attribute set "ldap.basedn"  ='ou=sandbox,dc=eu' where directory_id=10100;

我找到了双引号应该起作用但它们不起作用的答案。我可以在某些 SQL 编辑器中手动修改列,但我想设置一个脚本:

psql -f fix_directory.sql jiradb7

UPDATE 过程中列的正确转义是什么?

更新:

select "ldap.secure" from "cwd_directory_attribute";
ERROR:  syntax error at or near "select"
LINE 2: select "ldap.secure" from "cwd_directory_attribute";

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您混淆了列 values 和列 names

    您的表有一个名为attribute_name 的列,其中包含值'ldap.user.filter'(并且应该是'ldap.basedn' 在不同的行中)。

    所以你想要的是:

    update cwd_directory_attribute 
       set attribute_value = 'ou=sandbox,dc=eu' 
    where directory_id = 10100
      and attribute_name = 'ldap.basedn';
    

    【讨论】:

    • 好收获!我是瞎子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2019-09-04
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多