GVKun编程网logo

PostgreSQL 序列绑定字段与不绑定字段的区别说明(plsql序列不存在)

21

在本文中,我们将为您详细介绍PostgreSQL序列绑定字段与不绑定字段的区别说明的相关知识,并且为您解答关于plsql序列不存在的疑问,此外,我们还会提供一些关于centos7下源码编译安装php支

在本文中,我们将为您详细介绍PostgreSQL 序列绑定字段与不绑定字段的区别说明的相关知识,并且为您解答关于plsql序列不存在的疑问,此外,我们还会提供一些关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、MySQL用户管理与PostgreSQL用户管理的区别说明、postgresql boolean 字段与 smallint 字段的自动转换、postgresql – MD5字段的最佳数据类型是什么?的有用信息。

本文目录一览:

PostgreSQL 序列绑定字段与不绑定字段的区别说明(plsql序列不存在)

PostgreSQL 序列绑定字段与不绑定字段的区别说明(plsql序列不存在)

  项目招商找A5 快速获取精准代理名单

这篇文章主要介绍了PostgreSQL 序列绑定字段与不绑定字段的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

序列绑定字段与不绑定字段的区别

绑定字段

构造数据

drop sequence if exists test_id_seq;
create sequence test_id_seq;
drop table if exists test;
create table test(id int default nextval('test_id_seq'), name text);
alter sequence test_id_seq owned by test.id;

 

测试

test=# drop table test;
DROP TABLE
test=# \d
Did not find any relations.
test=#

 

不绑定字段

构造数据

drop sequence if exists test_id_seq;
create sequence test_id_seq;
drop table if exists test;
create table test(id int default nextval('test_id_seq'), name text);

 

测试

test=# drop table test;
DROP TABLE
test=# \d
       List of relations
 Schema |  Name   |  Type  | Owner 
--------+-------------+----------+----------
 public | test_id_seq | sequence | postgres
(1 row)

test=#

总结

序列绑定字段,则删除表的时候,序列会被一并删除

序列不绑定字段,则序列与表是独立的,删除表不会将序列一并删除

补充:PG表中字段使用序列类型以及绑定序列实例

两种方法效果是一样的

直接看代码

文章来源:

来源地址:https://www.jb51.net/article/205199.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yy@haotui.cn 举报,一经查实,本站将立刻删除。

centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教

centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教

1. 下载源码

$ mkdir /usr/downloads
$ wget -c http://cn2.php.net/distributions/php-5.6.20.tar.gz
$ tar -xvf php-5.6.20.tar.gz
$ mv php-5.6.20 /usr/local/src
$ cd !$ & cd php-5.6.20
登录后复制

2. 阅读安装指导

$ ls -also
$ less README
$ less INSTALL
登录后复制

3. 安装依赖包

$ yum install apr apr-util apr-devel apr-util-devel prce lynx
登录后复制

4. 安装httpd

$ wget -c http://apache.fayea.com//httpd/httpd-2.4.20.tar.gz
$ tar -xvf httpd-2.4.20.tar.gz
$ cd httpd-2.4.20
$ ./configure \
--prefix=/usr/local/programs/apache2 \
--enable-rewrite \
--enable-so \
--enable-headers \
--enable-expires \
--with-mpm=worker \
--enable-modules=most \
--enable-deflate \
--enable-module=shared
$ make
$ make install
$ cd /usr/local/programs/apache2
$ cp bin/apachectl /etc/init.d/httpd ## 复制启动脚本
$ /etc/init.d/httpd start ## 启动apache服务器,访问http://localhost/
$ egrep -v ''^[ ]*#|^$'' /usr/local/apache2/conf/httpd.conf | nl ## 查看apache服务器的配置
## 将apache加入系统服务
vi /etc/rc.d/rc.local
```
/usr/local/programs/apache2/bin/apachectl start
```
$ cat /etc/rc.local
登录后复制

4. 安装postgresql

立即学习“PHP免费学习笔记(深入)”;

$ yum install readline-devel  ## 安装readline依赖
$ cd /usr/downloads
$ wget -c https://ftp.postgresql.org/pub/source/v9.5.0/postgresql-9.5.0.tar.bz2
$ tar -xvf postgresql-9.5.0.tar.bz2
$ cd postgresql-9.5.0
$ ./configure --prefix=/usr/local/programs/postgresql
$ make
$ su
$ make install
$ /sbin/ldconfig /usr/local/programs/postgresql/lib ## 刷新下共享动态库
$ cd /usr/local/programs/postgresql
$ bin/psql --version  ## 检查运行情况
## 开始对postgresql的配置
$ vi /etc/profile.d/postgresql.sh ## 增加环境变量,不推荐直接在/etc/profile中添加,系统更新升级时会需要merge
``` 
PATH=/usr/local/programs/postgresql:$PATH
export PATH
```
$ source /etc/profile ## 更新环境变量

## 增加用户和其他文件夹
$ adduser postgres
$ passwd postgres 
$ mkdir /usr/local/programs/postgresql/logs
$ mkdir /usr/local/programs/postgresql/data
$ chown postgres /usr/local/programs/postgresql/data
$ su - postgres

## 初始化数据库
$ ./bin/initdb -D ./data
$ ./bin/createdb test
$ ./bin/psql test
## 已有数据库,可导入data文件夹后尝试root访问,假如带密码,可能需要进一步研究下
$ ./bin/postgres -D ./data >./logs/start-log-1.log 2>&1 &
$ ./bin/psql --list  ##列出数据库
## ok,安装完成

## 自定义设置,权限控制等,可以跳过,等熟悉使用后再做
## 编辑数据库配置及权限文件:
$ vi /usr/local/programs/postgresql/data/postgresql.conf   ## 数据库配置文件
$ chown postgres postgresql.conf
$ chmod 644 postgresql.conf
$ vi /usr/local/programs/postgresql/data/pg_hba.conf   ## 权限文件
$ vi /usr/local/programs/postgresql/data/pg_ident.conf

## 设置开机自启动:
$ vi /etc/rc.d/rc.local    ## 添加如下内容
```
/usr/local/programs/postgresql/bin/postgresql start
```
登录后复制

5. 安装php

## 源码已经在第一步中下载,现在开始安装:
$ yum install libxml2 libxml2-devel libpng libpng-devel libjpeg libjpeg-devel freetype freetype-devel
$ ./configure \
--prefix=/usr/local/programs/php \
--with-apxs2=/usr/local/programs/apache2/bin/apxs \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-zlib-dir \
--enable-mbstring \
--with-pgsql=/usr/local/programs/postgresql \
--with-pdo-pgsql=/usr/local/programs/postgresql 
$ make
$ make test
> Bug #42718 (unsafe_raw filter not applied when configured as default filter) [ext/filter/tests/bug42718.phpt]  XFAIL REASON: FILTER_UNSAFE_RAW not applied when configured as default filter, even with flags
> Bug #67296 (filter_input doesn''t validate variables) [ext/filter/tests/bug49184.phpt]  XFAIL REASON: See Bug #49184
> Bug #53640 (XBM images require width to be multiple of 8) [ext/gd/tests/bug53640.phpt]  XFAIL REASON: Padding is not implemented yet
> zend multibyte (7) [ext/mbstring/tests/zend_multibyte-07.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
> zend multibyte (9) [ext/mbstring/tests/zend_multibyte-09.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
>Bug #70470 (Built-in server truncates headers spanning over TCP packets) [sapi/cli/tests/bug70470.phpt]  XFAIL REASON: bug is not fixed yet

## 查阅官方的bug,发现:
> id=66582: status : Closed. Fixed in master (PHP7)
> id=42718: status : Assigned
> id=42718: reference to id=49184, unsolved for many years
## 那就不关心了,直接装吧
$ make install
> You may want to add: /usr/local/programs/php/lib/php to your php.ini include_path

## 那就按它说的设置吧
$ cp php.ini-development /usr/local/programs/php/lib/php.ini
```
include_path = ".;/usr/local/programs/php/lib/php"

## 然后,编辑httpd的设置,确保其能正确解析php文件
```
...
LoadModule php5_module modules/libphp5.so
...
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php5

...
<ifmodule dir_module>
    DirectoryIndex index.html index.php
</ifmodule>     
```

## 重启httpd,测试
$ cd /usr/local/programs/apache2
$ bin/httpd -h
$ bin/httpd -k stop
$ bin/httpd -f conf/httpd.conf
## 默认设置的www页面在./htdocs/下,那就先去里面建一个测试页面吧
$ vi htdocs/index.php
```
<?php phpinfo(); ?>
```
$ curl http://localhost/index.php |grep postgresql
#ok
登录后复制

后续应该做的事

* 1. 启动时,不需要要手动指定配置文件
* 2. php初始化www目录设置
* 3. php 用户、权限管理等

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了centos 7下源码编译安装php支持PostgreSQL,包括了postgresql,centos 7方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

MySQL用户管理与PostgreSQL用户管理的区别说明

MySQL用户管理与PostgreSQL用户管理的区别说明

一. MySQL用户管理

【例1.1】使用root用户登录到本地mysql服务器的test库中

mysql -uroot -p -hlocalhost test

【例1.2】使用root用户登录到本地mysql服务器的test库中,执行一条查询语句

mysql -uroot -p -hlocalhost test -e "DESC person;"

【例1.3】使用CREATE USER创建一个用户,用户名是jeffrey,密码是mypass,主机名是localhost

CREATE USER ''jeffrey''@''localhost'' IDENTIFIED BY ''mypass'';

【例1.4】使用GRANT语句创建一个新的用户testUser,密码为testpwd。用户 testUser对所有的数据有查询和更新权限,并授于对所有数据表的SELECT和UPDATE权限

GRANT SELECT,UPDATE ON *.* TO ''testUser''@''localhost'' IDENTIFIED BY ''testpwd''; /*创建账户并授予权限*/
SELECT Host,User,Select_priv,Update_priv, FROM mysql.user where user=''testUser''; /*查看账户权限信息*/

【例1.5】使用INSERT创建一个新账户,其用户名称为customer1,主机名称为localhost,密码为customer1:

INSERT INTO user (Host,User,Password) VALUES(''localhost'',''customer1'',PASSWORD(''customer1''));

【例1.6】使用DROP USER删除用户''jeffrey''@‘localhost''

DROP USER ''jeffrey''@''localhost'';

【例1.7】使用DELETE删除用户''customer1''@‘localhost''

DELETE FROM mysql.user WHERE host=''localhost'' and user=''customer1'';

【例1.8】使用mysqladmin将root用户的密码修改为“rootpwd”

mysqladmin -u root -p password "123456"

【例1.9】使用UPDATE语句将root用户的密码修改为“rootpwd2”:

UPDATE mysql.user set Password=password("rootpwd2")
WHERE User="root" and Host="localhost";

【例1.10】使用SET语句将root用户的密码修改为“rootpwd3”:

SET PASSWORD=password("rootpwd3");

【例1.11】使用SET语句将testUser用户的密码修改为“newpwd”:

SET PASSWORD FOR ''testUser''@''localhost''=password("newpwd");

【例1.12】使用UPDATE语句将testUser用户的密码修改为“newpwd2”:

UPDATE mysql.user set Password=PASSWORD("newpwd2")
WHERE User="testUser" and Host="localhost";

【例1.13】使用GRANT语句将testUser用户的密码修改为“newpwd3”:

sql

【例1.14】testUser用户使用SET语句将自身的密码修改为“newpwd4”:

SET PASSWORD = PASSWORD("newpwd4");

【例1.15】使用GRANT语句创建一个新的用户grantUser,密码为“grantpwd”。用户grantUser对所有的数据有查询、插入权限,并授于GRANT权限。GRANT语句及其执行结果如下:

MySQL> GRANT SELECT,INSERT ON *.* TO ''grantUser''@''localhost'' IDENTIFIED BY ''grantpwd'' WITH GRANT OPTION;
Query OK, 0 rows affected (0.03 sec)

结果显示执行成功,使用SELECT语句查询用户testUser2的权限:

MySQL> SELECT Host,User,Select_priv,Insert_priv, Grant_priv FROM mysql.user where user=''grantUser'';
+-----------+------------+-------------+--------------+-------------+
| Host | User | Select_priv | Insert_priv | Grant_priv |
+-----------+------------+-------------+--------------+--------------+
| localhost | testUser2 | Y  | Y  | Y  |
+-----------+------------+-------------+--------------+--------------+
1 row in set (0.00 sec)

【例1.16】使用REVOKE语句取消用户testUser的更新权限。REVOKE语句及其执行结果如下:

MySQL> REVOKE UPDATE ON *.* FROM ''testUser''@''localhost'';
Query OK, 0 rows affected (0.00 sec)

执行结果显示执行成功,使用SELECT语句查询用户test的权限:

MySQL> SELECT Host,User,Select_priv,Update_priv,Grant_priv FROM MySQL.user where user=''testUser'';

【例1.17】使用SHOW GRANTS语句查询用户testUser的权限信息。SHOW GRANTS语句及其执行结果如下:

MySQL> SHOW GRANTS FOR ''testUser''@''localhost'';

案例操作过程

打开MySQL客户端工具,输入登录命令,登录MySQL。

C:\>mysql -u root -p
Enter password: **

输入正确密码,按回车,出现欢迎信息表示登录成功。

选择mysql数据库为当前数据库。

MySQL> use mysql;
Database changed

出现Database changed信息表明切换数据库成功。

创建新账户,用户名称为newAdmin,密码为pw1,允许其从本地主机访问MySQL。

使用GRANT语句创建新账户,创建过程如下:

MySQL> GRANT SELECT, UPDATE(id, name, age)
 -> ON test_db.person_old
 -> TO ''newAdmin''@''localhost'' IDENTIFIED BY ''pw1''
 -> WITH MAX_CONNECTIONS_PER_HOUR 30;
SELECT host, user, select_priv, update_priv FROM user WHERE user=''newAdmin'';
SELECT host, db, user, table_name, table_priv, column_priv 
FROM tables_priv WHERE user=''newAdmin'';
SELECT host, db, user, table_name, column_name, column_priv 
FROM columns_priv WHERE user=''newAdmin'';

3条SQL语句的查询结果分别如下:

MySQL> SELECT host, user, select_priv, update_priv FROM user WHERE user=''newAdmin'';
MySQL> SELECT host, db, user, table_name, table_priv, column_priv
 -> FROM tables_priv WHERE user=''newAdmin'';
MySQL> SELECT host, db, user, table_name, column_name, column_priv
 -> FROM columns_priv WHERE user=''newAdmin'';

使用SHOW GRANTS语句查看newAdmin的权限信息。

查看newAdmin账户的权限信息,输入语句如下:

SHOW GRANTS FOR ''newAdmin''@''localhost'';

使用newAdmin用户登录MySQL。

退出当前登录,使用EXIT命令,语句如下:

MySQL> exit
Bye

使用newAdmin账户登录MySQL,语句如下:

C:\>MySQL -u newAdmin -p
Enter password: ***

输入密码正确后,出现“mysql>”提示符,登录成功。

使用newAdmin用户查看test_db数据库中person_dd表中的数据。

newAdmin用户被授予test数据库中person表中3个字段上的查询权限,因此可以执行SELECT语句查看这几个字段的值,执行过程如下:

MySQL> SELECT * FROM test_db.person_dd LIMIT 5;

使用newAdmin用户向person_dd表中插入一条新记录,查看语句执行结果。

插入新记录,输入语句如下:

INSERT INTO test_db.person_old(name, age,info) VALUES(''gaga'', 30);

执行结果如下:

ERROR 1142 (42000): INSERT command denied to user ''newAdmin''@''localhost'' for table ''person''

可以看到,语句不能执行,错误信息表明newAdmin用户不能对person表进行插入操作。因此,用户不可以执行没有被授权的操作语句。

退出当前登录,使用root用户重新登录,收回newAdmin账户的权限。

输入退出命令:exit

重新以root用户登录MySQL,并选择mysql数据库为当前数据库。

输入语句收回newAdmin账户的权限,执行过程如下:

REVOKE SELECT, UPDATE ON test.person FROM ''newAdmin''@''localhost'';

执行结果如下:

MySQL> REVOKE SELECT, UPDATE ON test.person FROM ''newAdmin''@''localhost'';
Query OK, 0 rows affected (0.00 sec)

删除newAdmin的账户信息。

删除指定账户,可以使用DROP USER语句,输入如下:

DROP USER ''newAdmin''@''localhost'';

二. PostgreSQL用户管理

2.1 组角色管理

【例2.1】创建一个名称为post2的角色,SQL代码如下:

CREATE ROLE post2;

【例2.2】查看系统中的角色,SQL代码如下:

SELECT rolname FROM pg_roles;

【例2.3】修改角色post1的名称为post3。SQL语句如下:

ALTER ROLE post1 RENAME TO post3;

【例2.4】删除角色post3。SQL语句如下:

DROP ROLE post3;

2.2 角色的各种权限

1、登录

【例2.5】创建角色post4,此角色具有登录权限。SQL语句如下:

CREATE ROLE post4 LOGIN;

2超级用户

【例2.6】创建角色post5,此角色具有超级用户权限。SQL语句如下:

CREATE ROLE post5 SUPERUSER;

3、创建数据库

【例2.7】创建角色post6,此角色具有创建数据库权限。SQL语句如下:

CREATE ROLE post6 CREATEDB;

4、 创建角色

角色要想创建角色,必须明确给出该权限(除了超级用户以外)。一旦角色具有CREATEROLE权限,即可更改和删除其他角色,还可以给其它角色赋予或者撤销成员关系。当然,如果想对超级用户进行操作,仅有此权限还不够,必须拥有SUPERUSER权限。

创建具有创建角色权限的角色,SQL语法如下:

CREATE ROLE name CREATEROLE;

【例2.8】创建角色post7,此角色具有创建数据库权限。SQL语句如下:

CREATE ROLE post7 CREATEROLE;

5、口令

在客户认证方法要求与数据库建立连接时,需要口令权限。常见的认证方法包括password、md5和crypt。

创建具有口令权限的角色,SQL语法如下:

CREATE ROLE name 

口令认证方法 具体口令

【例2.9】创建角色post8,此角色具有口令权限。SQL语句如下:

CREATE ROLE post8 PASSWORD ''123456'';

2.3 账户管理

1、创建用户

【例2.10】创建用户名称为postgre02,并具有创建数据库和创建角色的权限,同时登陆密码为“123456789”。SQL语句如下:

CREATE USER postgre02 PASSWORD ''123456789'' 
CREATEDB CREATEROLE ;

2、删除用户

【例2.11】使用DROP USER删除账户“postgre02”,SQL语句如下:

DROP USER postgre02;

3、修改用户密码

【例2.12】将账户“postgre01”的密码修改为“123123”,SQL语句如下:

ALTER USER postgre01 PASSWORD ''123123'';

2.4 组角色和用户角色管理

1、对组角色授权

【例2.13】给“post1”角色添加创建数据表和创建角色的权限,SQL语句如下:

ALTER ROLE post1 CREATEDB CREATEROLE;

2、对用户授权

【例2.14】给“postgre01”用户添加创建数据表和创建角色的权限,SQL语句如下:

ALTER USER postgre01 CREATEDB CREATEROLE;

3、收回组角色权限

【例2.15】将“post1”角色的创建数据表和创建角色权限收回,SQL语句如下:

ALTER ROLE post1 NOCREATEDB NOCREATEROLE;

4、收回用户权限

【例2.16】将“postgre01”用户的创建数据表和创建角色权限收回,SQL语句如下:

ALTER USER postgre01 NOCREATEDB NOCREATEROLE;

2.5 数据库权限管理

1、修改数据库的拥有者

【例2.17】将“mytest”数据库的所有者修改为post1。SQL语句如下:

ALTER DATABASE mytest OWNER TO post2;

2、增加用户的数据表权限

【例2.18】其中ppo1是一个现有的数据表,postgres是一个现有的用户,允许postgres更新ppo1数据表,用下面的命令更新表的权限:

GRANT UPDATE ON ppo1 TO postgres;

如果将上面的语句修改为:

GRANT UPDATE ON ppo1 TO PUBLIC;

则表示将数据表ppo1的更新权限赋予系统中的所有角色。

如果将上面的语句修改为:

GRANT ALL ON ppo1 TO postgres;

则表示把适用于该对象的所有权限都赋予用户postgres。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:
  • Mysql 用户权限管理实现
  • 详解MySQL 用户权限管理
  • MySQL如何利用DCL管理用户和控制权限
  • MySQL创建用户和权限管理的方法
  • MySQL 8.0用户和角色管理原理与用法详解
  • mysql用户权限管理实例分析
  • mysql用户管理操作实例分析
  • MySQL用户与权限的管理详解
  • MySQL超详细实现用户管理实例

postgresql boolean 字段与 smallint 字段的自动转换

postgresql boolean 字段与 smallint 字段的自动转换

1、使用 postgre 账号进入到相应的模式下执行:

CREATE OR REPLACE FUNCTION boolean_to_smallint(b boolean) RETURNS smallint AS $$
    BEGIN
            RETURN (b::boolean)::bool::int;
    END;
$$LANGUAGE plpgsql;

CREATE CAST (boolean AS smallint) WITH FUNCTION boolean_to_smallint(boolean) AS implicit;

 

2、测试:(is_leader 字段为 smallint 类型)

UPDATE public."user"
        SET is_leader=True
        WHERE id=''125'';

postgresql – MD5字段的最佳数据类型是什么?

postgresql – MD5字段的最佳数据类型是什么?

我们正在设计一个已知读取繁重的系统(每分钟读取数万次).

>有一个表名称作为一种中央注册表.每一行都有一个文本字段表示和一个唯一键,它是该表示的MD5哈希.1该表目前有数千万条记录,预计在应用程序的生命周期内会增长到数十亿.
>有许多其他表(具有高度变化的模式和记录计数)引用了名称表.其中一个表中的任何给定记录都保证有一个name_key,它在功能上是names表的外键.

1:顺便说一句,正如您所料,此表中的记录一旦写入就是不可变的.

对于除names表之外的任何给定表,最常见的查询将遵循以下模式:

SELECT list,of,fields 
FROM table 
WHERE name_key IN (md5a,md5b,md5c...);

我想优化读取性能.我怀疑我的第一站应该是最小化指数的大小(虽然我不介意被证明是错误的).

问题:
key和name_key列的最佳数据类型是什么?
是否有理由在位(128)上使用十六进制(32)? BTREE还是GIN?

数据类型 uuid非常适合该任务.对于varchar或文本表示,它仅占用16个字节而不是RAM中的37个字节. (或者在磁盘上有33个字节,但奇数在许多情况下需要填充以使其有效地达到40个字节.)并且uuid类型具有更多优点.

例:

SELECT md5('Store hash for long string,maybe for index?')::uuid AS md5_hash

细节和更多解释:

> Convert hex in text representation to decimal number
> Would index lookup be noticeably faster with char vs varchar when all values are 36 chars

如果你不需要md5的加密组件,你可能会考虑其他(更便宜的)散列函数,但我会使用md5作为你的用例(主要是只读的).

一句警告:对于你的情况(一旦写入不可变),功能依赖(伪自然)PK就可以了.但同样令人痛苦的是文本更新是可能的.考虑纠正一个错字:PK和所有依赖索引,其他几十个表中的FK列和其他引用也必须改变.表和索引膨胀,锁定问题,缓慢更新,丢失引用,…

如果文本在正常操作中可以改变,那么surrogate PK将是更好的选择.我建议使用bigserial列(范围-9223372036854775808到9223372036854775807 – 即nine quintillion two hundred twenty-three quadrillion three hundred seventy-two trillion thirty-six something billion)数十亿行的不同值.在任何情况下都可能是个好主意:对于数十个FK列和索引,8个而不是16个字节!).或random UUID更大的基数或分布式系统.您可以随时存储所述md5(作为uuid)以快速从原始文本中查找主表中的行.有关:

> Default value for UUID column in Postgres

至于你的查询:

> Optimizing a Postgres query with a large IN

要解决@Daniel’s comment:如果您更喜欢不带连字符的表示,请删除显示的连字符:

SELECT replace('90b7525e-84f6-4850-c2ef-b407fae3f271','-','')

但我不会打扰.默认表示就好了.这个问题真的不是这里的代表.

如果其他方应该采用不同的方法并将没有连字符的字符串放入混合中,那也不是问题. Postgres接受几个合理的文本表示作为uuid的输入. The documentation:

Postgresql also accepts the following alternative forms for input: use
of upper-case digits,the standard format surrounded by braces,
omitting some or all hyphens,adding a hyphen after any group of four
digits. Examples are:

06002

更重要的是,md5()函数返回文本,你将使用decode()转换为bytea,默认表示为:

SELECT decode(md5('Store hash for long string,maybe for index?'),'hex')

\220\267R^\204\366HP\302\357\264\007\372\343\362q

您必须再次编码()以获取原始文本表示:

SELECT encode(my_md5_as_bytea,'hex');

最重要的是,由于internal varlena overhead,存储为bytea的值将占用RAM中的20个字节(以及磁盘上的17个字节,24 with padding),这对于简单索引的大小和性能特别不利.

一切都在这里支持uuid.

关于PostgreSQL 序列绑定字段与不绑定字段的区别说明plsql序列不存在的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、MySQL用户管理与PostgreSQL用户管理的区别说明、postgresql boolean 字段与 smallint 字段的自动转换、postgresql – MD5字段的最佳数据类型是什么?等相关内容,可以在本站寻找。

本文标签:

上一篇postgresql 中的序列nextval详解

下一篇PostgreSQL物理备份恢复之 pg_rman的用法说明(pg_rman 备库 备份)