相关文章推荐

今天用NavCate建立PostGreSql建标,使用Double发现居然没有这个类型,百度各种博客都表示有Double类型,但是我测试就没了
在这里插入图片描述
后来发现,这里面居然有别名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1 . 整数类型

类型 smallint,integer,和 bigint 存储各种范围的全部是数字的数,也就是没有小数部分的数字。 试图存储超出范围以外的数值将导致一个错误。

常用的类型是 integer,因为它提供了在范围,存储空间, 和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用 smallint。而只有在 integer 的范围不够的时候才使用 bigint,因为前者绝对快得多。

bigint 类型可能不是在所有平台上都运转正确, 因为它依赖编译器对八字节整数的支持。在那些没有这样支持的机器上, bigint 的作用和 integer 一样(但是仍然占据八字节存储)。不过,我们还不知道任何有这样的情况的平台。

SQL只声明了整数类型 integer(或int)和 smallint。类型 bigint,和类型名 int2,int4,和 int8 都是扩展, 也在许多其它 SQL 数据库系统中使用。

2. 任意精度数值

类型 numeric 可以存储最多1000位精度的数字并且准确地进行计算。 我们特别建议将它用于货币金额和其它要求计算准确的数量。不过,numeric 类型上的算术运算比整数类型或者我们下一节描述的浮点数类型要慢很多。

在随后的内容里,我们使用了下述术语: 一个 numeric 的比例是到小数点右边为止小数部分的位数, numeric 的精度是整个数字里全部数据位的数目,也就是小数点两边的数据数目。 因此数字 23.5141 的精度为6而比例为4。你可以认为整数的比例为零。

numeric 字段的最大精度和最大比例都是可以配置的。要声明一个类型为 numeric 的字段,你可以用下面的语法

NUMERIC(precision, scale)
精度必须为正数,比例可以为零或者正数。 另外,

NUMERIC(precision)
选择了 0 为比例。不带任何精度或者比例声明

NUMERIC
则创建一个可以存储一个直到实现精度上限的任意精度和比例的数值, 一个这样类型的字段将不会把输入数值转化成任何特定的比例, 而带有比例声明的 numeric 字段将把输入值转化为该比例。 (SQL标准要求缺省的比例是 0。也就是转化成整数精度。 我们觉得这样做有点没用。如果你关心移植性,那你最好总是明确声明精度和比例。)

如果一个要存储的数值的比例比字段声明的比例高, 那么系统将尝试圆整(四舍五入)该数值到指定的小数位。 然后,如果小数点左边的数据位数超过了声明的精度减去声明的比例, 那么抛出一个错误。

数值数据值物理上是不带任何前导或者后缀零的形式存储的。 因此,字段上声明的精度和比例都是最大值,而不是固定分配的。 (在这个方面,numeric 类型更类似于 varchar(n), 而不像 char(n)。) 实际存储是每四个十进制位两个字节,然后在整个数据上加上八个字节的额外开销。

除了普通的数字值之外,numeric 类型允许特殊值 NaN, 表示”不是一个数字”。任何在 NaN 上面的操作都生成另外一个 NaN。 如果在 SQL 命令里把这些值当作一个常量写,你必须在其周围放上单引号,比如 UPDATE table SET x = ‘NaN’。在输入时,字串 NaN 当作大小写无关看待。

类型 decimal 和 numeric 是等效的。 两种类型都是SQL标准。

3. 浮点数类型

数据类型 real 和 double precision 是不准确的,变精度的数字类型。 实际上,这些类型是 IEEE 标准 754 二进制浮点数算术(分别对应单和双精度)的一般实现, 外加下层处理器,操作系统和编译器对它的支持。

不准确意味着一些数值不能准确地转换成内部格式并且是以近似的形式存储的,因此存储然后把数据再打印出来可能显示一些缺失。 处理这些错误以及这些错误是如何在计算中传播的属于数学和计算机科学的一个完整的分支, 我们不会在这里进一步讨论它,这里的讨论仅限于如下几点:

如果你要求准确的计算(比如计算货币金额),应使用 numeric 类型。

如果你想用这些类型做任何重要的复杂计算,尤其是那些你对范围情况(无穷,下溢)严重依赖的事情,那你应该仔细评诂你的实现。

拿两个浮点数值进行相等性比较可能象,也可能不象想像那样运转。

通常,real 类型的范围是至少 -1E+37 到 +1E+37, 精度至少是 6 位小数。double precision 类型通常有 -1E+308 到 +1E+308 的范围,精度是至少 15 位数字。太大或者太小的数值都会导致错误。 如果输入数据太高,那么可能发生园整。太接近零的数字,如果无法与零值的表现形式相区分就会产生下溢错。

除了普通的数字值之外,浮点类型还有几个特殊值:

Infinity
-Infinity
NaN

这些值分别表示 IEEE 754 特殊值”正无穷大”,”负无穷大”, 以及”不是一个数字”。(在不遵循 IEEE 754 浮点算术的机器上,这些值的含义可能不是预期的。) 如果在 SQL 命令里把这些数值当作常量写,你必须在它们周围放上单引号, 像这样 UPDATE table SET x = ‘Infinity’。 输入时,这些值是以大小写无关的方式识别的。
PostgreSQL 还支持 SQL 标准表示法 float 和 float§ 用于声明非精确的数值类型。 在这里,p 声明以二进制位表示的最低可接受精度。 在选取 real 类型的时候,PostgreSQL 接受 float(1) 到 float(24),在选取 double precision 的时候,接受 float(25) 到 float(53)。在允许范围之外的 p 值将导致一个错误。 没有声明精度的 float 将被当作是 double precision。

注意: 在 PostgreSQL 7.4 以前,在 float§ 里面的精度会被当作是这么多位数的十进制位。到 7.4 已经被修改成与 SQL 标准匹配,标准声明这个精度是以二进制位度量的。假设 real 和 double precision 分别有 24 和 53 个二进制位的位数对 IEEE 标准的浮点实现来说是正确的。 在非 IEEE 平台上,这个数值可能略有偏差,但是为了简化,我们在所有平台上都用了同样的 p 值范围。

3.1 问题:精度无缘无故丢失
这个默认建表语句不能指定经度,很奇怪,我设计 zbx float8(30,20) 表示存储地理位置信息(),经度,22.99865252707371,但是会默认为22.99865252707371后面的一个1无法存储,而且变成
在这里插入图片描述
这里没有小数点数。

4. Serial(序号)类型

serial 和 bigserial 类型不是真正的类型, 只是为在表中设置唯一标识做的概念上的便利。(类似其它一些数据库中的 AUTO_INCREMENT 属性)。 在目前的实现中,下面一句话:

CREATE TABLE tablename (
colname SERIAL
);
等价于声明下面几句话:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename(
colname integer DEFAULT nextval(‘tablename_colname_seq’) NOT NULL
);
因此,我们就创建了一个整数字段并且把它的缺省数值安排为从一个序列发生器取值。 应用了一个 NOT NULL 约束以确保空值不会被明确地插入。 在大多数情况下你可能还希望附加一个 UNIQUE 或者 PRIMARY KEY 约束避免意外地插入重复的数值,但这个不是自动发生的。

注意: 在 PostgreSQL 7.3 以前,serial 隐含 UNIQUE。但现在不再如此。 如果你希望一个序列字段有一个唯一约束或者一个主键,那么你现在必须声明,就像其它数据类型一样。

要使用 serial 字段插入序列的下一个数值到表中, 主要是要注意 serial 应该赋予缺省值。 我们可以通过在 INSERT 语句中把该字段排除在字段列表之外来实现, 也可以通过使用 DEFAULT 关键字来实现。

类型名 serial 和 serial4 是等效的: 两个都创建 integer 字段。类型名 bigserial 和 serial8 也一样,只不过它创建一个 bigint 字段。 如果你预计在表的生存期中使用的标识数目超过 231 个,那么你应该使用 bigserial。

一个 serial 类型创建的序列在所属的字段被删除的时候自动删除,其它情况下是不会被删除的。 (这一点在 PostgreSQL 版本 7.3 之前可不是真的。请注意,这种自动删除的关联在通过重载 7.3 以前的数据库转储的时候可不会自动发生; 那样的转储文件不包含需要建立这种关联关系的信息。) 另外,这样的序列和字段之间的依赖性只在 serial 字段本身上有; 如果任何其它字段引用了序列(可能是手工调用 nextval 函数), 那么,如果这个序列被删除了,它们就会被破坏。我们认为这样使用 serial 字段是一种不好的形式;如果你想用同一个序列发生器给几个字段喂数据,那么还是把序列发生器作为独立对象创建。

今天用NavCate建立PostGreSql建标,使用Double发现居然没有这个类型,百度各种博客都表示有Double类型,但是我测试就没了后来发现,这里面居然有别名1 . 整数类型类型 smallint,integer,和 bigint 存储各种范围的全部是数字的数,也就是没有小数部分的数字。 试图存储超出范围以外的数值将导致一个错误。常用的类型是 integer,因为它提供了...
mdb格式文件可以通过mdbtools工具将内中包含的每张表导出到csv格式文件。由于access 数据库 postgresQL 数据库 格式上会存在不通性,所以使用python的文件处理,将所得csv文件修改成正确、能识别的格式。 导入脚本说明(此脚本运行于linux): 1.apt-get install mdbtools,安装mdbtools工具 2.将mdb 文件拷贝到linux虚拟机中,修改脚本中mdb文件目录‘dir’ 3.修改服务器及 数据库 配置 4.执行脚本 复制代码 代码如下:# -*- encoding: utf-8 -*-import osimport reimport psyc
PostgreSQL 提供了丰富的 数据类型 。用户可以使用 CREATE TYPE 命令在 数据库 中创建新的 数据类型 PostgreSQL 数据类型 被分为四种,分别是基本 数据类型 、复合 数据类型 、域和伪类型。 ​ 基本 数据类型 数据库 内置的 数据类型 ,包括integer、char、varchar等 数据类型 。表6-1列出了` PostgreSQL 提供的所有基本 数据类型 。复合 数据类型 是用户自己定义的,使用CREATE TYPE命令就能创建一个复合 数据类型 。域是一种特殊的基本 数据类型 ,它由基本 数据类型 加上一个约束条
文章目录第一次登陆 PG 查看 数据库 版本查看所有 PG 库创建 数据库 使用 数据库 删除 数据库 Table 数据表创建Table查看当前库中所有表查看表结构修改表名删除表引用操作系统文件脚本 \i 第一次登陆 PG 像oracle一样, 虽然我们安装 数据库 的时候使用的是root超级用户, 但是一切的 数据库 操作都是受用 postgres 这个系统普通用户: su - postgres 查看 数据库 版本 [postgres@ pg 01 ~]$ p sql --version p sql ( PostgreSQL ) 12.0 查看所有 PG 库 这点很像myql的结构, 一共有三个 数据库 postgres 系统库 剩下的两个
PostgreSQL 跨库访问有3种方法:Schema,dblink,postgres_fdw。 方法A:在 PG 上建立不同SCHEMA,将数据和存储过程分别放到不同的schema上,经过权限管理后进行访问。 方法A的示例如下: 测试1(测试postgres超级用户对不同schema下对象的访问) 查看当前 数据库 中的schema  postgres=# \dn  List of schemas  Name | Owner ——————-+——— dbms_job_procedure | postgres pg agent | postgres  postgres | postgres  public
postgresql -12 数据库 中,创建了一个分时数据表,加载的数据超过2亿条。在一次数据对接时,发现自增量主键居然用了 SERIAL,再跑一段时间这张表肯定要爆了~ 现在想调整为 SERIAL8,初始的想法直接修改字段类型: alter table tab_name alter column data_id type SERIAL8; -- 失败!类型SERIAL8不存在! 但实际上 create table 语句中的字段类型 SERIAL8,并不存在。 SERIAL8 (或者SERIAL)会创
我对 PostGreSQL 只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考。在不熟悉的知识领域里,总是有搜索引擎可以帮到我。初步了解 PostGreSQL 数据库 及数据形态 首先我想看看 PostGreSQL 数据库 以及我想要获取的数据形态是什么样子的,Linux和 PostGreSQL 这两个关键字我都不熟悉,搜了一下 到了一个可以连通 PostGreSQL 数据库 的Windows客户端,叫 pg Admin,我装的是III版本,应该是比较新的,下载安装后看到界面: 点击那个电源插头的logo可以新建服务器连接 名称就是在 PG Admin客户端的显示名,可以自定义
idea 报错 Cannot run program "C:\Program Files\Java\jdk1.8.0_121\bin\java" (in directory "G:\MAVENPROJ
Caused by: java.io.IOException: Can't get master address from ZooKeeper; znode data == null 不是比较可爱的人: 解决了谢谢。我用eclispe出现org.apache.hadoop.hbase.NotServingRegionException错误,然后用sh hbase hbck找到了你上面的错误。master和regionserver日志没看到和你一样的错误日志,master就下面的部分日志 2022-01-29 15:44:10,635 INFO [AM.ZK.Worker-pool2-t32] master.RegionStates: Onlined 25bce7fff459b1a96c24d285e9f919cc on hadoop01,60020,1643441913734 2022-01-29 15:44:54,137 DEBUG [hadoop01,60000,1643441911769-ClusterStatusChore] regionserver.HRegionFileSystem: No StoreFiles for: hdfs://hadoop01:9000/hbase/data/default/weblog/25bce7fff459b1a96c24d285e9f919cc/cf1 2022-01-29 15:45:54,160 DEBUG [region-location-1] regionserver.HRegionFileSystem: No StoreFiles for: hdfs://hadoop01:9000/hbase/data/default/weblog/25bce7fff459b1a96c24d285e9f919cc/cf1 2022-01-29 15:49:42,291 DEBUG [master:hadoop01:60000.oldLogCleaner] master.ReplicationLogCleaner: Didn't find this log in ZK, deleting: hadoop02%2C60020%2C1643368752404.1643368781877.meta weblog为表名,cf1为列簇名。没看懂,去看了hdfs上 spring batch使用读数据的问题 Shymeleaf: 使用JdbcPagingItemReader时排序字段取值如果相同 就有可能丢失数据。 我本来有20条,只读出了10条,但是,把排序字段改成 unique类型的全读出来了。 感谢大佬。 Caused by: java.io.IOException: Can't get master address from ZooKeeper; znode data == null Maynor996: 膜拜技术大佬,来我博客指点江山吧