首页 > 解决方案 > 在 Postgresql 中创建和访问以数值开头的模式

问题描述

我为我的数据库中的每个新租户生成一个 10 个字符的字母数字随机字符串作为模式名称。

在这个例子中,它生成了“5ku2mug7m8”作为字符串。架构已正确创建(在图片中),但在访问架构时,出现错误

"ERROR:  syntax error at or near "5"
LINE 1: SELECT * FROM 5ku2mug7m8.tablename"

我收集到是由于领先的数字。我尝试用双引号(“”)包装架构,但 postgres 不接受。

我的问题是:如果我无法访问带有前导数字的模式,为什么 postgres 首先允许创建它?现在我在数据库中有一个无法访问的模式——除非它可以访问,而我只是想念它?

编辑:从文档中,

SQL 标识符和关键字必须以字母(az,以及带有变音符号和非拉丁字母的字母)或下划线 (_) 开头。标识符或关键字中的后续字符可以是字母、下划线、数字 (0-9) 或美元符号 ($)。请注意,根据 SQL 标准的字母,标识符中不允许使用美元符号,因此使用它们可能会降低应用程序的可移植性......

但是为什么首先允许创建没有任何错误的模式呢?好奇的。

模式名称

标签: postgresql

解决方案


您可能使用 pgAdmin 创建了架构,该工具会自动为您添加双引号。

您当然可以删除架构

DROP SCHEMA "5ku2mug7m8";

除非您在架构名称中有诸如前导或尾随空格之类的讨厌的东西。

您可以通过以下方式找到真正的架构名称:

SELECT quote_ident(nspname)
FROM pg_namespace
WHERE nspname LIKE '%5%';

您的经验和对文档的研究很有价值。您已经了解为什么选择有效的 SQL 标识符且不需要双引号的对象或列名(“标识符”)是一个坏主意。


推荐阅读