温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PostgreSQL中USER关键字如何使用

发布时间:2021-07-23 15:18:05 来源:亿速云 阅读:384 作者:Leah 栏目:大数据

这篇文章将为大家详细讲解有关PostgreSQL中USER关键字如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

有人从MySQL改用PG,用户表大概这么个结构

CREATE TABLE "user"(
userid int,
username text,
...
)

不加双引号是不可以的,USER是保留关键字。
猜测建表用的是某种GUI工具,自动给表名加双引号,所以创建是没有问题的。

通过JDBC运行SQL:SELECT * FROM user;
然后 rs.getString(2) 试图取出用户名,被告知超过列数范围。直到注意到这个表名叫user,问题才得以解决。

我们来试试,两种方式都是可以的

flying=# select user;
  user
--------
 quanzl
(1 row)

flying=# select * from user;
  user
--------
 quanzl
(1 row)

user是个什么语法元素?既能出现在target列表看起来是个伪列,又能出现在FROM列表看起来是个返回结果集的伪表(这个词我自己发明的)。前者容易理解,我们看看后者。

from_clause:
      FROM from_list              { $$ = $2; }
      | /*EMPTY*/                { $$ = NIL; }
    ;

from_list:
      table_ref                { $$ = list_make1($1); }
      | from_list ',' table_ref        { $$ = lappend($1, $3); }
    ;

这是FROM子句的语法定义,其中 table_ref 的部分定义

      | func_table func_alias_clause
        {
          RangeFunction *n = (RangeFunction *) $1;
          n->alias = linitial($2);
          n->coldeflist = lsecond($2);
          $$ = (Node *) n;
        }

func_table定义

func_table: func_expr_windowless opt_ordinality

 func_expr_windowless定义

func_expr_windowless:
      func_application            { $$ = $1; }
      | func_expr_common_subexpr        { $$ = $1; }
    ;

在func_expr_common_subexpr语法结构里

      | USER
        {
          $$ = makeSQLValueFunction(SVFOP_USER, -1, @1);
        }

FROM user 就是这么来的。

关于PostgreSQL中USER关键字如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI