PostgreSQL 名称解释k bookindex

key word,标识符和关键词

syntax of,标识符和关键词

krb_caseins_users配置参数,安全和认证

krb_server_keyfile配置参数,安全和认证

 

 

 

 标识符和关键词

上例中的SELECTUPDATEVALUES记号是关键词的例子,即SQL语言中具有特定意义的词。记号MY_TABLEA则是标识符的例子。它们标识表、列或者其他数据库对象的名字,取决于使用它们的命令。因此它们有时也被简称为“名字”。关键词和标识符具有相同的词法结构,这意味着我们无法在没有语言知识的前提下区分一个标识符和关键词。一个关键词的完整列表可以在附录 C中找到。

SQL标识符和关键词必须以一个字母(a-z,也可以是带变音符的字母和非拉丁字母)或一个下划线(_)开始。后续字符可以是字母、下划线(_)、数字(0-9)或美元符号($)。注意根据SQL标准的字母规定,美元符号是不允许出现在标识符中的,因此它们的使用可能会降低应用的可移植性。SQL标准不会定义包含数字或者以下划线开头或结尾的关键词,因此这种形式的标识符不会与未来可能的标准扩展冲突 。

系统中一个标识符的长度不能超过 NAMEDATALEN-1 字节,在命令中可以写超过此长度的标识符,但是它们会被截断。默认情况下,NAMEDATALEN 的值为64,因此标识符的长度上限为63字节。如果这个限制有问题,可以在src/include/pg_config_manual.h中修改 NAMEDATALEN 常量。

关键词和不被引号修饰的标识符是大小写不敏感的。因此:

UPDATE MY_TABLE SET A = 5;

可以等价地写成:

uPDaTE my_TabLE SeT a = 5;

一个常见的习惯是将关键词写成大写,而名称写成小写,例如:

UPDATE my_table SET a = 5;

 

这里还有第二种形式的标识符:受限标识符被引号修饰的标识符。它是由双引号(")包围的一个任意字符序列。一个受限标识符总是一个标识符而不会是一个关键字。因此"select"可以用于引用一个名为“select”的列或者表,而一个没有引号修饰的select则会被当作一个关键词,从而在本应使用表或列名的地方引起解析错误。在上例中使用受限标识符的例子如下:

UPDATE "my_table" SET "a" = 5;

 

受限标识符可以包含任何字符,除了代码为0的字符(如果要包含一个双引号,则写两个双引号)。这使得可以构建原本不被允许的表或列的名称,例如包含空格或花号的名字。但是长度限制依然有效。

一种受限标识符的变体允许包括转义的用代码点标识的Unicode字符。这种变体以U&(大写或小写U跟上一个花号)开始,后面紧跟双引号修饰的名称,两者之间没有任何空白,如U&"foo"(注意这里与操作符&似乎有一些混淆,但是在&操作符周围使用空白避免了这个问题) 。在引号内,Unicode字符可以以转义的形式指定:反斜线接上4位16进制代码点号码或者反斜线和加号接上6位16进制代码点号码。例如,标识符"data"可以写成:

U&"d\0061t\+000061"

下面的例子用斯拉夫语字母写出了俄语单词 “slon”(大象):

U&"\0441\043B\043E\043D"

 

如果希望使用其他转义字符来代替反斜线,可以在字符串后使用UESCAPE子句,例如:

U&"d!0061t!+000061" UESCAPE '!'

转义字符可以是除了16进制位、加号、单引号、双引号、空白字符之外的任意单个字符。注意转义字符是被写在单引号而不是双引号内。

为了在标识符中包括转义字符本身,将其写两次即可。

Unicode转义语法只有在服务器编码为UTF8时才起效。当使用其他服务器编码时,只有在ASCII范围内(最高到\007F)的编码点才能被使用。4位和6位形式都可以被用来定义UTF-16代理对来组成代码点大于U+FFFF的字符,尽管6位形式的存在使得这种做法变得不必要(代理对并不被直接存储,而是被被绑定到一个单独的代码点然后被编码到UTF-8)。

将一个标识符变得受限同时也使它变成大小写敏感的,反之非受限名称总是被转换成小写形 式。例如,标识符FOOfoo"foo"在PostgreSQL中被认为是相同的,而"Foo""FOO"则互 不相同且也不同于前面三个标识符(PostgreSQL将非受限名字转换为小写形式与SQL标准是不兼容 的,SQL标准中要求将非受限名称转换为大写形式。这样根据标准, foo应该和 "FOO"而不是"foo"相同。如果希望写一个可移植的应用,我们应该总是用引号修饰一个特定名字或者 从不使用 引号修饰)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当我们谈论"PostgreSQL SQL语句解释分析"时,通常指的是对SQL查询语句进行解析和分析,以了解查询的执行计划和性能。下面是一些与此相关的主题: 1. 解析器(Parser):PostgreSQL的解析器负责将SQL查询语句转换成内部数据结构,以便进行后续的处理和分析。 2. 查询重写(Query Rewriting):查询重写是指将原始的SQL查询语句重写为等价的形式,以便更好地优化查询性能。这可能涉及到表达式的转换、谓词下推、联接顺序优化等操作。 3. 查询优化器(Query Optimizer):查询优化器负责选择最佳的执行计划,以提高查询性能。它会考虑到表的统计信息、索引可用性、连接顺序等因素,并生成一个最优的执行计划。 4. 执行计划(Execution Plan):执行计划描述了如何执行SQL查询语句的详细步骤,包括读取哪些表、使用哪些索引、执行哪些操作等。通过分析执行计划,可以了解查询的性能瓶颈和优化建议。 5. 统计信息(Statistics):为了做出好的查询优化决策,PostgreSQL收集表和索引的统计信息,包括行数、唯一值数、数据分布等。这些统计信息用于查询优化器生成最佳执行计划。 6. 查询计划缓存(Query Plan Cache):PostgreSQL会缓存查询的执行计划,以便在相同查询被再次执行时可以直接使用缓存的计划,从而提高查询性能。 通过对SQL语句的解析和分析,PostgreSQL可以优化查询性能,并提供有关查询执行计划的详细信息。这些功能可以帮助开发人员和数据库管理员更好地理解和调优他们的SQL查询。如果你有具体的SQL语句需要分析,可以提供给我,我可以帮你解释和分析它。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值