一 标识符和关键字
         1. SQL 标识符和关键字必须以一个字母 (a-z 以及带变音符的字母和非拉丁字母 )或下划线(_) 开头, 随后的字符可以是字母、下划线、数字 (0-9)、 美元符号 ($)。
         2. 根据 SQL 标准,美元符号不允许出现在标识符中, 因此使用美元符号将不易移植。
         3. SQL 标准不会定义包含数字或者以下划线开头或结尾的关键字, 因此按照这种格式定义的标识符是安全的,不会和将来标准的扩展特性冲突。
         4. 系统使用不超过 NAMEDATALEN-1 个字符作为标识符; 你可以在命令中写更长的名字,但它们会被截断。
                   (1)NAMEDATALEN 的缺省值是 64 , 因此标识符最大长度是 63 字节。
                   (2) 如果觉得这个限制有问题,那么你可以在 src/include/pg_config_manual.h里修改NAMEDATALEN 来改变它。
         5. 关键字和未被引号包围的标识符都是大小写无关的,但是建议:把关键字写成大写,而名字等用小写。
                   UPDATE MY_TABLE SET A = 5; 和 uPDaTE my_TabLE SeT a = 5; 是等效的。
         6. 把一个标识符用引号包围起来同时也令它大小写相关,而没有引号包围起来的名字总是转成小写。
                   (1) 标识符FOO, foo和"foo" 是等价的 PostgreSQL名字
                   (2) 但"Foo"和 "FOO" 与上面三个以及它们之间都是不同的。 PostgreSQL里对未加引号的名子总是转换成小写
                   (3) 这和 SQL 标准是不兼容的, SQL 标准要求未用引号包围起来的名字总是转成大写。因此根据标准, foo等于"FOO" 但不等于 "foo"
                   (4) 如果你想编写可移植的程序,那么我们建议你要么就总是用引号包围某个名字,要么就从来不引
二 常量
         1. 两个只是通过至少一个换行符的空白分隔的字符串常量会被连接在一起, 并当做它们是写成一个常量处理。
                   (1)SELECT 'foo'
                            'bar'; 和 SELECT 'foobar'; 是等价的。
         2. 转义字符串常量,这是一个 PostgreSQL对SQL 标准的扩展。转义字符串语法是通过在字符串前写字母 E (大写或者小写)的方法声明的。
                   (1)C 风格的转义字符串常量。 => select e'this is \n a string!';
                                                 ?column? 
                                               ------------
                                                this is   +
                                                 a string!
                                               (1 row)
                      主意:最好是不使用反斜杠转义。如果你需要使用反斜杠转义来表示特殊的字符, 那么请在字符串常量前加上 E。
                             要在字符串常量里包含反斜杠, 则写两个反斜杠(\\)。另外, PostgreSQL 允许用一个反斜杠来转义单引号 \', 不过,将来版本 的 PostgreSQL 将不允许这么用。所以最好坚持使用符合标准的 ''。
                   (2)Unicode 转义字符串常量。一个转义 Unicode字符常量以 U& 或者u&开始,在引号中, 通过写一个后面跟有4位 16进制代码点或跟有“+”号和 6位16 进制代码点的反斜杠, Unicode字符可以写成转义格式。
                             例如:U&'d\0061t\+000061'; 和 U&'d!0061t!+000061' UESCAPE '!'; 和 u&'d!0061t!0061' UESCAPE '!'; 都是代表“ data”
                            cd03=> select U&'d!0061t!+000061' UESCAPE '!';
                             ?column?
                            ----------
                             data
                            (1 row)
                   (3) 美元符引用字符串常量。如果一个字符串里面包含了很多特殊字符,如: [\t\r\n\v\\],那么用$q$[\t\r\n\v\\]$q$ 这种方式表示会很方便( $q$,是一个字符串开始和结束标签,两个标签大小写一致)。
                    但是这并非 sql标准。
                            => select $q$[\t\r\n\v\\]$q$;
                               ?column?  
                            --------------
                             [\t\r\n\v\\]
                            (1 row)
                    在定义函数是经常用到,如:
                            $function$
                            BEGIN
                                RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);END;
                            $function$
                   (4) 位串常量 ,位串常量里可以用的字符只有 0 和1 。
                            2 进制:
                            => SELECT B'1001';
                             ?column?
                            ----------
                             1001
                            (1 row)
                            16 进制:
                            => SELECT X'1FF';
                               ?column?  
                            --------------
                             000111111111
                            (1 row)
三 数据类型
          常用的数据类型:
名字 别名 描述
bigint int8 有符号8字节整数
bigserial serial8 自增8字节整数
bit [ (n) ]   定长位串
bit varying [ (n) ] varbit 变长位串
boolean bool 逻辑布尔值(真/假)
box   平面上的矩形
bytea   二进制数据("字节数组")
character varying [ (n) ] varchar [ (n) ] 变长字符串
character [ (n) ] char [ (n) ] 定长字符串
cidr   IPv4 或 IPv6 网络地址
circle   平面上的圆
date   日历日期(年, 月, 日)
double precision float8 双精度浮点数字(8字节)
inet   IPv4 或 IPv6 主机地址
integer intint4 有符号 4 字节整数
interval [fields ] [ (p) ]   时间间隔
line   平面上的无限长直线
lseg   平面上的线段
macaddr   MAC (Media Access Control)地址
money   货币金额
numeric [ (p, s) ] decimal [ (p, s) ] 可选精度的准确数字
path   平面上的几何路径
point   平面上的点
polygon   平面上的封闭几何路径
real float4 单精度浮点数(4 字节)
smallint int2 有符号 2 字节整数
smallserial serial2 自增 2 字节整数
serial serial4 自增 4 字节整数
text   变长字符串
time [ (p) ] [ without time zone ]   一天中的时间(无时区)
time [ (p) ] with time zone timetz 一天里的时间,包括时区
timestamp [ (p) ] [ without time zone ]   日期和时间(无时区)
timestamp [ (p) ] with time zone timestamptz 日期和时间,包括时区
tsquery   文本检索查询
tsvector   文本检索文档
txid_snapshot   用户级别的事务ID快照
uuid   通用唯一标识符
xml   XML 数据
json   JSON 数据
1.  负数在计算机中以其正值的补码形式表达,能够表示多一个数字,而且避免了减法运算
smallint 2 字节 小范围整数 -32768 到 +32767
=> insert into jay_test values(32768);
          ERROR:  smallint out of range
数值类型
名字 存储空间 描述 范围
smallint 2 字节 小范围整数 -32768 到 +32767
integer 4 字节 常用的整数 -2147483648 到 +2147483647
bigint 8 字节 大范围整数 -9223372036854775808 到 +9223372036854775807
decimal 变长 用户声明精度,精确 小数点前 131072 位;小数点后 16383 位
numeric 变长 用户声明精度,精确 小数点前 131072 位;小数点后 16383 位
real 4 字节 变精度,不精确 6 位十进制数字精度
double precision 8 字节 变精度,不精确 15 位十进制数字精度
smallserial 2 字节 小范围自增整数 1 到 32767
serial 4 字节 自增整数 1 到 2147483647
bigserial 8 字节 大范围自增整数 1 到 9223372036854775807
2.如果要表示精确的小数,用decimal和numeric,两者都是一样的。
3.real和double precision都不能表示准确的小数。
(1)real只能保存6位数字,科学计数法也是一样(指数部分不算)
          (2)如果整数位已经大于六位,则采用科学计数法:5.24961e+12
          (3)如果小数位+整数位(整数位小于六位)大于六位,会四舍五入
          (4)所以real结果是很难预料的,而且值采用科学计数法之后误差会变大
          (5)如果使用real类型,应该确保值不会超过999999。
          (6)但是效率会比decimal和numeric高!因为他的位数是固定的。
          (7)取值范围:最大值的二进制表示为0/1(符合位) 11111111(指数位)  111 111 111 111 111 111 111 11(尾数位),即x=+/-(2-2^(-23)) * 2^127=+/-3.40282e+38
(8)特殊值Infinity:正无穷  -Infinity:负无穷 NaN:不是一个数值
例如:
=> create table jay_test(id real);
CREATE TABLE
cd03=> insert into jay_test values(123.342453457345);

INSERT 0 1
cd03=> select * from jay_test ;
   id
---------
123.342
(1 row)

4. numeric 类型
          存储非常大的数字并且准确地进行计算, 用于货币金额和其它要求精确计算的场合, numeric类型上的算术运算比整数类型或者浮点数类型要慢很多。

          NUMERIC(precisionscale)
     precision:精度 最大值为1000
     scale:标度 如果传入的小数标度大于声明的标度,则四舍五入。
     例如:2.234的精度为4,标度为3
     numeric 类型的数据值在物理上是不带任何前导或者后缀零的形式存储的。 因此,字段上声明的精度和标度都是最大值,而不是固定分配的。在这个方面, numeric类型更类似于varchar(n)而不是 char(n)。实际存储是每四个十进制位两个字节, 然后在整个数据上加上三到八个字节的额外开销。
          numeric类型允许用特殊值NaN 表示"不是一个数字"。任何在NaN上面的操作都生成另外一个 NaN。PostgreSQL认为NaN相等, 并且大于所有非NaN值。
     5.序列号类型
          smallserial,serialbigserial类型不是真正的类型, 只是为在表中创建唯一标识做的概念上的便利。声明的时候会创建一个属于该字段的序列。
          一个serial类型创建的序列在所属的字段被删除的时候自动删除。
          注意:不管 smallserial,serial还是bigserial,生成的序列最大值总是9223372036854775807(bigint),但是实际字段可接受的值可能没有这么大,如:smallserial可接受的最大值为:32767,但是序列生成的值可能大于这个值,那么在插入的时候报错。

5.字符类型

          这三种类型之间没有性能差别,除了当使用填充空白类型时的增加存储空间, 和当存储长度约束的列时一些检查存入时长度的额外的CPU周期。 虽然在某些其它的数据库系统里,character(n) 有一定的性能优势,但在PostgreSQL里没有。 事实上,character(n)通常是这三个中最慢的, 因为额外存储成本。在大多数情况下,应该使用text 或character varying
          但是实际测试结果如下:
结论:1.插入1百万条记录,varchar稍快。
2.更新70万条记录,char明显更快。
3.在存储空间上,varchar明显比char更节约空间。
          4.另外由于postgres才用mvcc(多版本并发控制),无论更新或者删除数据都会使表内容变大。

postgres关键字、常量和数据类型相关推荐

  1. java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等

    java的注释.关键字.标识符.变量常量.                             数据类型.运算符.流程控制等 1. java概述 1.1 java的技术体系 Java SE:是Ja ...

  2. c语言常量与变量ppt,C语言 变量、常量与数据类型.ppt

    C语言 变量.常量与数据类型.ppt (25页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 变量.常量与数据类型回顾C语言的基本字符集有那 ...

  3. php变量名当文件命_php基础教程 第二步 通俗易懂的学习变量、常量与数据类型...

    简介 变量.常量以及数据类型 在编程中,变量指一个存储值的一个盒子,或者说容器.例如一个箱子,用来放杂物,这个箱子就是一个容器,值就为杂物.容器可以分为很多类型,例如瓶子.被子.盒子等.值也有很多类型 ...

  4. 【C 语言】数据类型本质 ( 数据类型别名 | typedef 关键字 | 为复杂数据类型设置别名 | 为简单数据类型设置别名 )

    文章目录 一.typedef 关键字 1.为复杂数据类型设置别名 2.为简单数据类型设置别名 二.代码示例 一.typedef 关键字 1.为复杂数据类型设置别名 使用 typedef 关键字为 复杂 ...

  5. php面试专题---2、常量及数据类型考点

    php面试专题---2.常量及数据类型考点 一.总结 一句话总结: 变量为null和变量判断为false的情况需要仔细注意下 1.PHP中字符串可以使用哪三种定义方法以及各自的区别是什么? 单引号:不 ...

  6. php基础教程 第二步 通俗易懂的学习变量、常量与数据类型

    简介 变量.常量以及数据类型 在编程中,变量指一个存储值的一个盒子,或者说容器.例如一个箱子,用来放杂物,这个箱子就是一个容器,值就为杂物.容器可以分为很多类型,例如瓶子.被子.盒子等.值也有很多类型 ...

  7. java 常量 类型_Java的常量及数据类型。

    一.Java的常量及数据类型. 程序的本质相当于一把钥匙,要输入数据或输出数据.而这个称为数据量(是否可变),而可变的就叫变量,不可变的就叫常量. 常量:在程序当中固定不变的数值常数. 1.首先我们打 ...

  8. JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)...

    Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...

  9. Javascript - 1 引入方式,变量常量,数据类型,运算符,流程控制,数组,函数,对象,DOM

    Javascipt:是一门弱类型的脚本语言,需要在网页上执行. html负责框架结构,css负责样式修饰,js负责行为交互,动态效果. 前端三大件:html,css,js. javascript 和 ...

  10. 【C语言】变量和常量、数据类型、进制转换、数据存储

    目录 1. 变量 1.1 变量的分类 1.1.1 局部变量 1.1.2 全局变量 1.2 变量的使用 1.3 变量的作用域和生命周期 1.3.1 作用域 1.3.2 生命周期 2. 常量 2.1 字面 ...

最新文章

  1. angularJs 之deferred
  2. 浅谈配置文件:spring-servlet.xml(spring-mvc.xml) 与 applicationContext.xml
  3. 关于windows注册表重定向和虚拟化分析
  4. JSP中一个页面怎么分清是链接过来还是提交过来的?
  5. c# 衍生类和基类的构造顺序
  6. idea编辑器中使用@Data注解无效解决办法
  7. [转载]WSDL 教程
  8. (分治)分治法 及 题目
  9. 小米5s升级Android8,小米5s、小米5s Plus升级8.0提前,好消息!
  10. 将网页发布到远程windows server
  11. 基于Java Web的随意购商城系统(开源项目)
  12. cad上样条曲线上的点太多了_CAD样条曲线如何转换成多段线?看完这篇文章你就懂了...
  13. 山西大学量子计算机,关于量子力学与量子计算机
  14. 【java模板引擎】-beetl
  15. 使用后端解析地图.shp.prj文件得到GeoJson数据
  16. 【转载】:马家寨:揭开陈圆圆携吴三桂后裔隐藏与繁衍真相
  17. 2020年中国共享电单车市场现状与格局分析,青桔、哈啰和美团占据市场主要份额「图」
  18. 聊天类APP功能测试总结
  19. 2021-07-24博物馆展览馆应用蓝牙AOA高精度定位导航导览的真实商用案例介绍
  20. android 位于底部的tab,GitHub - DevinFu/BottomTabBar: Android应用中位于底部的tab栏

热门文章

  1. 我们是龙的传人还是狼的传人? 《狼图腾》--- 绝对值得一读的书
  2. 根域名服务器作用,域名系统的主要功能是什么?域名系统中的本地域名服务器、根域名服务器、顶级域名 - 问答库...
  3. 自建CA然后颁发证书给搭建的httpd用
  4. 利用特性、泛型、反射生成sql操作语句(待修改
  5. selectpicker.js的属性和方法
  6. 25个令人难忘的广告设计
  7. Tensorflow入门(二)文本自动生成
  8. Matlab画六边形蜂窝网络点(任意个数)
  9. antDesign 自定义分页样式
  10. 【个人喜好诗词之一】归去来兮辞