【问题标题】:Is there a way to use ::regclass in a case sensitive way?有没有办法以区分大小写的方式使用 ::regclass ?
【发布时间】:2019-05-20 20:33:19
【问题描述】:

我想知道是否有一种方法可以使用::regclassstring 转换为pg_class.oid,同时尊重区分大小写。让我举个例子。使用::regclass 获取表的oid 通常很方便,例如列出表格的所有列

SELECT * FROM pg_attribute WHERE attrelid = 'public.my_table'::regclass

但是,::regclass 在进行搜索之前会隐式将输入转换为全小写。 (这类似于 PGSQL 如何解释 SQL 命令中的表名,如果你没有用双引号将它们括起来。)这意味着如果你的表被称为 MY_table,那么你不能使用转换为 ::regclass 来获取它oid.

我知道您可以使用其他方式,例如使用pg_class.relnamepg_class.relnamespace。这个问题专门关于使用::regclass,因为::regclass 更方便(如果我能找到一种方法让它以区分大小写的方式工作)。

我试过了

SELECT * FROM pg_attribute WHERE attreloid = '"public.my_table"'::regclass

但它搜索的名称中包含双引号。

【问题讨论】:

  • Related: Postgres Case Sensitivity: “在 PostgreSQL 中创建实体(表、视图、过程等)时,您应该指定它们不带引号或带引号但小写”
  • 你不是说'"public"."my_table"'::regclass吗?即单独引用完全限定名称的每个组成部分,因为 . 不是名称本身的一部分。
  • 哦。 ::脸掌::.加上引号,这样它们就不会包围 .修复第二个查询。谢谢

标签: postgresql


【解决方案1】:

我的第二个查询不起作用的原因是双引号在 .特点。所以这里是如何做到的。

SELECT * FROM pg_attribute WHERE attreloid = '"public"."my_table"'::regclass

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2021-09-11
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2014-06-10
    • 2021-03-17
    相关资源
    最近更新 更多