【发布时间】:2019-05-20 20:33:19
【问题描述】:
我想知道是否有一种方法可以使用::regclass 将string 转换为pg_class.oid,同时尊重区分大小写。让我举个例子。使用::regclass 获取表的oid 通常很方便,例如列出表格的所有列
SELECT * FROM pg_attribute WHERE attrelid = 'public.my_table'::regclass
但是,::regclass 在进行搜索之前会隐式将输入转换为全小写。 (这类似于 PGSQL 如何解释 SQL 命令中的表名,如果你没有用双引号将它们括起来。)这意味着如果你的表被称为 MY_table,那么你不能使用转换为 ::regclass 来获取它oid.
我知道您可以使用其他方式,例如使用pg_class.relname 和pg_class.relnamespace。这个问题专门关于使用::regclass,因为::regclass 更方便(如果我能找到一种方法让它以区分大小写的方式工作)。
我试过了
SELECT * FROM pg_attribute WHERE attreloid = '"public.my_table"'::regclass
但它搜索的名称中包含双引号。
【问题讨论】:
-
Related: Postgres Case Sensitivity: “在 PostgreSQL 中创建实体(表、视图、过程等)时,您应该指定它们不带引号或带引号但小写”
-
你不是说
'"public"."my_table"'::regclass吗?即单独引用完全限定名称的每个组成部分,因为.不是名称本身的一部分。 -
哦。 ::脸掌::.加上引号,这样它们就不会包围 .修复第二个查询。谢谢
标签: postgresql