【发布时间】:2019-04-03 06:57:08
【问题描述】:
我在 Postgres 上创建了一个长度大于 63 bytes 个字符的新模式。
CREATE SCHEMA "abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz";
以上语句创建了一个架构abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghi
Postgres 自动删除了多余的字节并创建了仅包含 63 个字节的架构(我原以为会出错)。
然后我运行以下命令:
SET search_path TO 'abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz';
SHOW search_path;
CREATE TABLE deepak(item varchar);
INSERT INTO deepak SELECT 'a';
TABLE "abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz".deepak;
我的问题是
- Show
search_path返回全名,但激活新的 63 字节名称模式。这是怎么发生的? -
select语句能够选择table deepak即使在给出错误的模式名称之后。怎么可能?
我也检查了information_schema.schemata 和pg_tables。这些表中存在 63 字节的名称。
【问题讨论】:
-
虽然is documented的行为我也觉得很烦人。
标签: postgresql namespaces identifier truncation