postgresql - 在 Postgresql 中创建和访问以数值开头的模式
问题描述
我为我的数据库中的每个新租户生成一个 10 个字符的字母数字随机字符串作为模式名称。
在这个例子中,它生成了“5ku2mug7m8”作为字符串。架构已正确创建(在图片中),但在访问架构时,出现错误
"ERROR: syntax error at or near "5"
LINE 1: SELECT * FROM 5ku2mug7m8.tablename"
我收集到是由于领先的数字。我尝试用双引号(“”)包装架构,但 postgres 不接受。
我的问题是:如果我无法访问带有前导数字的模式,为什么 postgres 首先允许创建它?现在我在数据库中有一个无法访问的模式——除非它可以访问,而我只是想念它?
编辑:从文档中,
SQL 标识符和关键字必须以字母(az,以及带有变音符号和非拉丁字母的字母)或下划线 (_) 开头。标识符或关键字中的后续字符可以是字母、下划线、数字 (0-9) 或美元符号 ($)。请注意,根据 SQL 标准的字母,标识符中不允许使用美元符号,因此使用它们可能会降低应用程序的可移植性......
但是为什么首先允许创建没有任何错误的模式呢?好奇的。
解决方案
您可能使用 pgAdmin 创建了架构,该工具会自动为您添加双引号。
您当然可以删除架构
DROP SCHEMA "5ku2mug7m8";
除非您在架构名称中有诸如前导或尾随空格之类的讨厌的东西。
您可以通过以下方式找到真正的架构名称:
SELECT quote_ident(nspname)
FROM pg_namespace
WHERE nspname LIKE '%5%';
您的经验和对文档的研究很有价值。您已经了解为什么选择有效的 SQL 标识符且不需要双引号的对象或列名(“标识符”)是一个坏主意。
推荐阅读
- pine-script - 无法转换类型 pine-script 错误?寻找解决方法
- python - 使用 Matplotlib 将 Pandas 数据框中的不同值着色为散点图上的不同颜色
- ubuntu - tex-live 构建失败:lacheck.c:没有这样的文件或目录
- android - findViewById 在绑定 ViewHolder 时返回 null(在嵌套的 RecyclerView 内)
- javascript - 使用 JavaScript,如果 URL 中提供了 id,我如何突出显示标签
- linux - 为位于我的一个文件夹中的 shell 脚本设置别名
- dask - 如何在 Dask 分布式 SSHCluster 中正确设置工作端口?
- node.js - Typescript Nodejs Dockerfile:错误 TS5057:在指定目录中找不到 tsconfig.json 文件:“。”
- django - 尝试将外键字段编辑到另一个模型中的一个模型
- docker - 通过 OpenVPN docker 路由流量