SELECT 表名 FROM 表名

再次看到这段代码,想起来以前随口在QQ群里提过,突然感觉还是记录一下比较好,所以专门开辟新博客分类,我们来看看 PostgreSQL 代码中都隐藏着什么秘密


假如我们发起一条语句:

SELECT rolname FROM pg_authid;

会发生什么事呢?其中一个步骤是确定表中是否有rolname

/* Try to identify as an unqualified column */
node = colNameToVar(pstate, colname, false, cref->location);

if (node == NULL)
{
...
	/*
	 * Try to find the name as a relation.  Note that only
	 * relations already entered into the rangetable will be
	 * recognized.
	 *
	 * This is a hack for backwards compatibility with
	 * PostQUEL-inspired syntax.  The preferred form now is
	 * "rel.*".
	 */
	rte = refnameRangeTblEntry(pstate, NULL, colname,
							   cref->location,
							   &levels_up);
	if (rte)
		node = transformWholeRowRef(pstate, rte,
									cref->location);

最后一段很奇怪,好在有说明,测试一下确实可用,但是这是我以前从来不知道的用法。

postgres=# SELECT pg_authid FROM pg_authid;
          pg_authid          
-----------------------------
 (quanzl,t,t,t,t,t,t,t,-1,,)
(1 row)

postgres=#

粗略查看了一下 9.4.5 文档,似乎没有关于这个的说明,应该是一个废弃已久的用法。

PostgreSQL代码中隐藏着很多秘密,我要继续挖掘。

转载于:https://my.oschina.net/quanzl/blog/539542

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值