注意PostgreSQL的关键字(保留字)和identified的用法和位置

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介:

关键字即词法解析时用到的一些固定的单词,identifier则是用户定义的一些名词(如表名,索引名,字段名,函数名等等)
PostgreSQL 有一张关键字列表
https://www.postgresql.org/docs/9.5/static/sql-keywords-appendix.html
在这个列表中的关键字,如果出现的位置可以是identified,则会报错。
https://www.postgresql.org/docs/9.5/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
例子:

postgres=# select 1 and;
ERROR:  syntax error at or near ";"
LINE 1: select 1 and;
                    ^

and就是一个关键字,并且他出现在了可以是identifer的位置,所以要解决这个问题就是加双引号,或者排除歧义。
使用双引号引排除歧义,把它变成别名identifier。

postgres=# select 1 "and";
 and 
-----
   1
(1 row)

使用as改变词法,排除歧义,把它变成别名。

postgres=# select 1 as and;
 and 
-----
   1
(1 row)

还有,如果key words出现在identifier位置时,还可能是定义名称的位置。
例子

postgres=# create table and (id int);
ERROR:  syntax error at or near "and"
LINE 1: create table and (id int);
                     ^
postgres=# create table "and" (id int);
CREATE TABLE

postgres=# drop table and;
ERROR:  42601: syntax error at or near "and"  -- 这里明确告诉你and错误了
LINE 1: drop table and;
                   ^
LOCATION:  scanner_yyerror, scan.l:1087
postgres=# drop table "and";
DROP TABLE

所以,如果你遇到类似的错误,用双引号,或者换名字即可。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL 关系型数据库 PostgreSQL
PostgreSQL datediff 日期间隔(单位转换)兼容SQL用法
标签 PostgreSQL , datediff 背景 使用datediff,对时间或日期相减,得到的间隔,转换为目标单位(日、月、季度、年、小时、秒。。。等)的数值。 DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} ) 周...
15431 0
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
PostgreSQL listagg within group (order by) 聚合兼容用法 string_agg ( order by) - 行列变换,CSV构造...
标签 PostgreSQL , order-set agg , listagg , string_agg , order 背景 listagg — Rows to Delimited Strings The listagg function transforms values from a g...
6256 0
|
存储 SQL 监控
16PostgreSQL 本地分区表的用法和优化|学习笔记
快速学习16PostgreSQL 本地分区表的用法和优化
897 0
16PostgreSQL 本地分区表的用法和优化|学习笔记
|
SQL 安全 关系型数据库
17PostgreSQL shared nothing分布式用法讲解|学习笔记(三)
快速学习17PostgreSQL shared nothing分布式用法讲解
276 0
17PostgreSQL shared nothing分布式用法讲解|学习笔记(三)
|
SQL 存储 移动开发
PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)|学习笔记
快速学习3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)
 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)|学习笔记
|
SQL JSON 关系型数据库
postgresql 高级用法
postgresql 高级用法
|
SQL 关系型数据库 数据库
3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)|学习笔记
快速学习3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)
|
SQL XML 移动开发
【学习资料】第14期快速入门PostgreSQL应用开发与管理 - 4 高级SQL用法
大家好,这里是快速入门PostgreSQL应用开发与管理 - 4 高级SQL用法
|
关系型数据库 数据库 PostgreSQL
Postgresql pg_dump&pg_restore用法
PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。pg_dump 一次只转储一个数据库, 并且不会转储有关角色或表空间的信息 (因为那些是群集范围而不是每个数据库)。
11530 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版