搜档网
当前位置:搜档网 › PostgreSQL数据库用户认证

PostgreSQL数据库用户认证

PostgreSQL数据库用户认证
PostgreSQL数据库用户认证

PostgreSQL数据库用户认证作者:小P

来自:https://www.sodocs.net/doc/4b17025822.html,

摘要:为了保证PostgreSQL数据库的安全性,我们需要对访问数据库的用户进行身份验证,本文介绍了有关于PostgreSQL数据库的用户认证的基本知识;

目录

1. pg_hba.conf 文件;

1.1 各个字段的含义;

1.2 authentication-method(认证方法);

1.3 示例 ;

2. 认证方法;

2.1. 信任认证;

2.2. 口令认证;

2.3. Kerberos 认证;

2.4. 基于 Ident 的认证;

2.4.1. 透过 TCP/IP 的身份认证;

2.4.2. 透过本地套接字的身份认证;

2.4.

3. Ident 映射;

2.5 一个 pg_ident.conf 文件例子;

2.6 PAM 认证;

3. 认证问题;

4. 关于本文;

5. 更新日志;

6. 参考文档;

7. 相关文档;

+++++++++++++++++++++++++++++++++++++++++++

正文

+++++++++++++++++++++++++++++++++++++++++++

当一个客户端应用与数据库服务器进行联接时,它声明它将以哪个PostgreSQL 用户的名称进行联接,就象我们登录一台Unix 计算机一样.在SQL 环境里,活跃的数据库用户名决定数据库对象的各种访问。

因此,实际上我们要限制的是用户可以联接的数据库; 认证是数据库服务器建立客户端应用的标识,然后通过一些手段判断是否允许此客户端应用(或者运行这个客户端应用的用户)与它所要求的用户名进行联接的过程; PostgreSQL 提供多种不同的客户端认证方式.认证某个特定客户端联接所使用的方法可以通过基于(客户端)的主机地址,数据库和用户的方式进行选择;一些认证方法还允许你通过用户名进行限制; PostgreSQL 用户名在逻辑上是和服务器运行的操作系统用户名相互独立的.如果某个服务器的所有用户在那台服务器机器上也有帐号,那么给数据库用户赋与操作系统用户名是有意义的.不过,一个接收远程访问的服务器很有可能有许多没有本地帐号的用户,因而在这种情况下数据库用户和操作系统用户名之间不必有任何联系;

1. pg_hba.conf 文件;

客户端认证是由数据目录里的文件pg_hba.conf 控制的,比如: /etc/postgresql/8.2/main/pg_hba.conf (hba 的意思是host-based authentication:基于主机的认证.)在initdb初始化数据目录的时候,它会安装一个缺省的文件; 文件pg_hba.conf 的常用格式是一套记录,每行一条。空白行行被忽略,井号( "#" )开头的注释也被忽略。一条记录是由若干用空格和/或tab 分隔的字段组成。如果字段用引号包围,那么它可以包含空白.记录不能夸行存在; 每条记录声明一种联接类型,一个客户端IP 地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字,以及对匹配这些参数的联接使用的认证方法.匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的第一条记录将用于执行认证.这个处理过程没有"跨越"或者"回头"的说法∶如果选择了一条记录而且认证失败,那么将不考虑后面的记录.如果没有匹配的记录,那么访问将被拒绝.每条记录可以下面三种格式之一: local database user

authentication-method [authentication-option]

host database user IP-address IP-mask authentication-method [authentication-option]

hostssl database user IP-address IP-mask authentication-method [authentication-option]

1.1 各个字段的含义;

local

这条记录匹配通过Unix 域套接字进行的联接企图.没有这种类型的记录,就不允许Unix 域套接字的联接。

host

这条记录匹配通过TCP/IP 网络进行的联接尝试.请注意,除非服务器是带着-i 选项或者打开了postgresql.conf 里面的tcpip_socket 配置参数集启动的,否则TCP/IP 联接是被禁止掉的.

hostssl

这条记录匹配通过在TCP/IP 上进行的SSL 联接企图.host 记录可以匹配SSL 和非SSL 的联接企图,但hostssl 记录需要SSL 联接。

要使用这个选项,制作服务器的时候必须打开SSL 支持.而且在服务器启动的时候,必须打开在postgresql.conf里的ssl选项。

database

声明记录所匹配的数据库。值all 表明该记录匹配所有数据库,值sameuser表示如果被请求的数据库和请求的用户同名,则匹配。samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。在其他情况里,这就是一个特定的PostgreSQL 的名字。我们可以通过用逗号分隔的方法声明多个数据库。一个包含数据库名的文件可以通过对该文件前缀@ 来声明.该文件必需和pg_hba.conf 在同一个目录;user

为这条记录声明所匹配的PostgreSQL用户.值all 表明它匹配于所有用户.否则,它就是特定PostgreSQL 用户的名字.多个用户名可以通过用逗号分隔的方法声明.组名字可以通过用+ 做组名字前缀来声明.一个包含用户名的文件可以通过在文件名前面前缀@ 来声明.该文件必需和pg_hba.conf 在同一个目录;

IP-address

IP-mask

这两个字段包含标准的点分十进制表示的IP地址/掩码值。(IP地址只能用数字的方式声明,而不能用域名或者主机名。)它们俩放在一起,声明了这条记录匹配的客户机的IP 地址。准确的逻辑是(actual-IP-address xor IP-address-field) and IP-mask-field 对于要匹配的记录必需为零.(当然,IP地址是可以欺骗的,但是这个考虑在PostgreSQL 的范围之外。)这些域只适用于host 和hostssl 记录;

1.2 authentication-method(认证方法);

trust

无条件地允许联接.这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期望的任意PostgreSQL 数据库用户身份进行联接,而不需要口令。

reject

联接无条件拒绝.常用于从一个组中"过滤"某些主机.

md5

要求客户端提供一个MD5 加密的口令进行认证.这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法.

crypt

类似md5 方法,只是用的是老式的crypt 加密认证,用于7.2 以前的客户端.对于7.2 以及以后的客户端,我们建议使用md5.

password

和"md5"一样,但是口令是以明文形式在网络上传递的.我们不应该在不安全的网络上使用这个方式;krb4

用Kerberos V4 认证用户.只有在进行TCP/IP 联接的时候才能用;

krb5

用Kerberos V5 认证用户.只有在进行TCP/IP 联接的时候才能用;

ident

获取客户的操作系统名(对于TCP/IP 联接,用户的身份是通过与运行在客户端上的ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。)然后检查一下,看看用户是否允许以要求的数据库用户进行联接,方法是参照在ident 关键字后面声明的映射;如果你使用了sameuser 映射,那么假设用户名是相等的。如果没有声明这个关键字,则在与pg_hba.conf 同目录的pg_ident.conf 文件中找出

映射名。如果这个文件里包含一条记录标识着ident提供的用户名和请求的PostgreSQL 用户名的映射,那么联接被接受;对于本地联接,只有在系统支持Unix域套接字信任证的情况下才能使用(目前是Linux,FreeBSD,NetBSD,OpenBSD,和BSD/OS);

pam

使用操作系统提供的可插入的认证模块服务(Pluggable Authentication Modules)(PAM)来认证;1.3 示例;

因为认证时系统是为每个联接请求顺序检查pg_hba.conf 里的记录的,所以这些记录的顺序是非常关键的.通常,靠前的记录有比较严的联接匹配参数和比较弱的认证方法,而靠后的记录有比较松的匹配参数和比较严的认证方法.比如,我们一般都希望对本地TCP 联接使用trust 认证,而对远端的TCP 联接要求口令.在这种情况下我们将trust 认证方法用于来自127.0.0.1 的联接,这条记录将出现在允许更广泛的客户端IP 地址的使用口令认证的记录前面; 注: 不要禁止超级用户访问template1 数据库。各种工具命令都需要访问template1; 在启动和postmaster 收到SIGHUP 信号的时候,系统都会重新装载pg_hba.conf 文件.如果你在活跃的系统上编辑了该文件,你就需要用kill 向postmaster 发一个SIGHUP信号,好让它重新读取该文件; 下面是pg_hba.conf 的一个例子:

# 允许在本机上的任何用户使用 Unix 域套接字(本地连接的缺省)

# 以任何身份联接任何数据库

#

#

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

local all all trust

# 和上面相同,但是使用的是自环的(loopback)TCP/IP 连接

#

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host all all 127.0.0.1 255.255.255.255 trust

# 同样,但用的是 Unix-套接字联接

local all all trust

# 允许 IP 地址为 192.168.93.x 的任何主机与数据库

# "template1" 相连,用与他们在自己的主机上相同 ident 的用户名标识他自己

# (通常是他的 Unix 用户名)

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host template1 all 192.168.93.0 255.255.255.0 ident sameuser

# 允许来自主机 192.168.12.10 的用户与 "template1" 数据库联接,

# 只要该用户提供了在正确的口令.

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host template1 all 192.168.12.10 255.255.255.255 md5

# 如果前面没有其它 "host" 行,那么下面两行将拒绝所有来自

# 192.168.54.1 的联接请求 (因为前面的记录先匹配

# 但是允许来自互联网上其它任何地方的有效的 Kerberos V5 认证的联接

# 零掩码表示不考虑主机 IP 的任何位.因此它匹配任何主机:

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host all all 192.168.54.1 255.255.255.255 reject

host all all 0.0.0.0 0.0.0.0 krb5

# 允许来自 192.168.x.x 的任何用户与任意数据库联接,只要他们通过 ident 检查

# 但如果 ident 说该用户是 "bryanh" 而他要求以 PostgreSQL 用户 "guest1" 联接,

# 那么只有在 `pg_ident.conf' 里有 "omicron" 的映射,说 "bryanh" 允许以

# "guest1" 进行联接时才真正可以进行联接.

#

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host all all 192.168.0.0 255.255.0.0 ident omicron

# 如果下面是用于本地联接的仅有的三行,那么它们将允许本地用户

# 只和它们自己的数据库联接(数据库名和用户名同名),

# 只有管理员和组"support"里的成员例外,他们可以联接到任何数据库。

# 文件 $PGDATA/admins 列出了那些允许与所有数据库联接的用户名.

# 在所有情况下都需要口令。

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

local sameuser all md5

local all @admins md5

local all +support md5

# 上面最后两行可以合起来写成一行

local all @admins,+support md5

# 数据库字段也可以使用列表和文件名,但组不行:

local db1,db2,@demodbs all md5

2. 认证方法;

2.1. 信任认证;

如果声明了trust (信任)认证模式,PostgreSQL 就假设任何可以联接到服务器的人都可以以任何他声明的数据库用户(包括数据库超级用户) 这个方法应该用于那些在联接到服务器端口已经有足够系统层次保

护的环境里; trust 认证对于单用户工作站的本地联接是非常合适和方便的.通常它本身并不适用于多用户环境的机器.不过,即使在多用户的机器上,你也可以使用trust,只要你利用文件系统权限限制了对postmaster 的套接字文件的访问.要做这些限制,你可以设置postgresql.conf 里面的参数

unix_socket_permissions (以及可能还有unix_socket_group).或者你可以设置unix_socket_directory,把套接字文件放在一个经过恰当限制的目录里; 设置文件系统权限只能帮助Unix 套接字联接.它不会限制本地TCP 联接;因此,如果你想利用权限来控制本地安全,那么删除pg_hba.conf 里的host ...

127.0.0.1 ... 行,或者把它改为一个非trust 的认证方法; trust 认证模式只有在你信任那些在

pg_hba.conf 里声明为trust,允许联接到服务器的行上的所有机器上面的所有用户的时候才是合适的.很少有理由使用trust 作为任何除来自localhost(127.0.0.1) 以外的TCP 联接的认证方式;

2.2. 口令认证;

以口令为基础的认证方法包括md5,crypt,和password.这些方法操作上非常类似,只不过口令通过联接传送的方法不同.如果你担心口令被窃听("sniffing"),那么md5 比较合适,如果你必需支持7.2 以前的老的客户端,那么可以选crypt.如果我们在开放的互联网上使用,应该尽可能避免使用password(除非你在联接上使用了SSL,SSH,或者其他通讯安全的联接封装; PostgreSQL 数据库口令与任何操作系统用户口令无关.各个数据库用户的口令是存储在pg_shadow系统表里面的.口令可以用查询语言命令CREATE USER 和ALTER USER 等管理,也就是说,CREATE USER foo WITH PASSWORD

'secret';.缺省时,如果没有明确地设置口令,存储的口令是空并且该用户的口令认证总会失败; 要限制允许访问某数据库的用户集,在一个独立的文件里列出用户,用户之间用逗号分隔.该文件应该包含逗号分隔的用户名或者每个用户名一行,并且和pg_hba.conf 在同一行.在用户列中写该文件的(本)名(不带路径),并且加一个前缀@.数据库名字列也类似这样接受一列数值或者一个文件名.你也可以通过在组名字前面前缀+ 来声明一个组名;

2.3. Kerberos 认证;

Kerberos 是一种适用于在公共网络上进行分布计算的工业标准的安全认证系统.对Kerberos 系统的叙述远远的超出了本文档的范围;概括说来它是相当复杂(同样也相当强大)的系统.Kerberos FAQ 或MIT 雅典娜计划是个开始探索的好地方.现存在好几种Kerberos发布的源代码; 要使用Kerberos,对它的支持必须在制作的时候打开.Kerberos 4 和 5 都被支持,不过我们在一次制作中只能支持一个版本; PostgreSQL 运行时象一个普通的Kerberos 服务.服务主的名字是servicename/hostname@realm,这里的servicename 是postgres (除非在配置时用 ./configure --with-krb-srvnam=whatever 选择了一个不同的hostname.hostname 是服务器及其全称的域名字.服务器的域是服务器机器的优先域; 客户主自给必须用它们自己的PostgreSQL 用户名作为第一个部件,比如pgusername/otherstuff@realm.目前PostgreSQL 没有检查客户的域;因此如果你打开了跨域的认证,那么在任意域里任何可以和你通讯的主都会被接受; 确认你的服务器的密钥文件是可以被PostgreSQL服务器帐户读取(最好就是只读的).密钥文件(keytab)的位置是用运行时配置参数krb_server_keyfile 声明的; 要生成密钥文件(keytab),可以用下面例子(对版本5)kadmin% ank -randkey postgres/https://www.sodocs.net/doc/4b17025822.html,

kadmin% ktadd -k krb5.keytab postgres/https://www.sodocs.net/doc/4b17025822.html, 阅读Kerberos 的文档获取详细信息; 在和数据库联接的时候,请确保自己对每个主都拥有一张匹配所请求的数据库用户名的门票.例子∶对于数据库用户fred,主fred@https://www.sodocs.net/doc/4b17025822.html, 和fred/https://www.sodocs.net/doc/4b17025822.html,@https://www.sodocs.net/doc/4b17025822.html, 都可以用于与数据库服务器认证; 如果你在你的Apache web 服务器上使用了mod_auth_krb和mod_perl,你可以用一个mod_perl脚本进行AuthType KerberosV5SaveCredentials.这样就有了一个通过web 的安全数据库访问,不需要额外的口令;

2.4. 基于Ident 的认证;

身份(ident)认证方法的运做模式是使用一个映射文件列出许可的用户和对应的用户的配对,然后通过检查客户端的操作系统用户名以及判断许可的数据库用户名的方法来认证。判断客户端的用户名是非常关键的安全点,根据连接类型的不同,它的实现方法也略有不同;

2.4.1. 透过TCP/IP 的身份认证

"Identification Protocol(标识协议)"在RFC 1413 里面描述.实际上每个类Unix的操作系统都带着一

个缺省时侦听113端口的身份服务器.身份服务器的基本功能是回答类似这样的问题:"是什么用户从你的端口X初始化出来联接到我的端口Y上来了?".因为在建立起物理联接后,PostgreSQL 既知道X 也知道Y,因此它可以询问运行尝试联接的客户端的主机,并且理论上可以用这个方法判断发起联接的操作系统用户; 这样做的缺点是它取决于客户端的完整性:如果客户端不可信或者被攻击者攻破,而且它们可以在113端口上运行任何程序并且返回他们选择的任何用户的话,就无法认证了.因此这个认证方法只适用于封闭的网络,这样的网络里的每台客户机都处于严密的控制下并且数据库和操作系统管理员可以比较方便地联系上.换句话说,你必须信任运行身份(ident)服务的机器.下面是警告:

身份标识协议并不适用于认证或者访问控制协议.

--RFC 1413

2.4.2. 透过本地套接字的身份认证;

在支持用于Unix 域套接字的SO_PEERCRED请求的系统上,(目前是Linux,FreeBSD,NetBSD,和BSD/OS),身份认证也可以用于局部联接.这个时候,使用身份认证不会增加安全风险;实际上这也是在这种系统上使用本地联接时的优选方法; 在没有SO_PEERCRED 请求的系统上,身份认证只能

通过TCP/IP连接获取。如果需要绕开这个限制,我们可以声明localhost 地址127.0.0.1,然后让连接指向这个地址;

2.4.

3. Ident 映射;

当使用以身份为基础的认证时,在判断了初始化联接的操作系统用户的名字后,PostgreSQL 判断他是否可以以他所请求的数据库用户的身份联接.这个判断是由跟在pg_hba.conf 文件里的ident 关键字后面的身份映射控制的.有一个预定义的身份映射是sameuser,表示任何操作系统用户都可以以同名数据库用户进行联接(如果后者存在的话).其他映射必须手工创建; 非sameuser 的身份映射存放在数据目录的文件里.每行的格式通常是:map-name ident-username database-username 注释和空白和普通情况一样处理.map-name 是将用于在pg_hba.conf里引用这个映射的任意名称.另外两个域声明某个操作系统用户被允许以哪个数据库用户的身份进行联接.同一个map-name 可以重复用于在一个映射里声明更多的用户映射.对一个操作系统用户可以映射为多少个数据库用户没有限制,反之亦然; 在系统启动和postmaster 收到一个SIGHUP 信号的时候会读取pg_ident.conf 文件;如果你在一台活跃的系统上编辑该文件,那么你需要给postmaster 发信号(用pg_ctl reload 或者kill -HUP) 令其重新读取该文件;

2.5 一个pg_ident.conf 文件例子;

# MAPNAME IDENT-USERNAME PG-USERNAME

omicron bryanh bryanh

omicron ann ann

# bob 在这台机器上的用户名是 robert

omicron robert bob

# bryanh 也可以以 guest1 身份连接

omicron bryanh guest1

2.6 PAM 认证;

这个认证类型操作起来类似password,只不过它使用PAM(Pluggable Authentication Modules)作为认

证机制。缺省的PAM 服务名是postgresql。你可以在pam 关键字后面提供自己的可选服务名。

3. 认证问题;

真正的认证失败以及相关的问题通常由类似下面的错误信息表白自身;

No pg_hba.conf entry for host 123.123.123.123, user andym, database testdb

这条信息出现的最大可能是你已经联接了服务器,但她不愿意和你说话.就象信息自己表示的那样,服务器拒绝了联接请求,因为她没有在她的pg_hba.conf 配置文件里找到认证记录;

Password authentication failed for user 'andym'

这样的信息表示你联接了服务器,并且她也愿意和你交谈,但是你必须通过pg_hba.conf 文件里声明的认证方法.检查你提交的口令,或者如果错误信息提到这些Kerberos 或IDENT 认证类型时检查你的这些软件;

FATAL 1: user "andym" does not exist

这是表示此用户不存在的另一方法;

FATAL 1: Database "testdb" does not exist in the system catalog.

你试图联接的数据库不存在.请注意如果你没有声明数据库名,缺省是数据库用户名,这可能正确也可能不正确;请注意服务器日志可能包含比报告给客户端的更多的有关认证失败的信息.如果你被失败的原因搞糊涂了,那么请检查日志。

4. 关于本文;

本文大部分资料都是参照中文文档,目的是让兄弟们查找方便一些,详细的东西在中文文档都有,多谢各位弟兄们指点

PostgreSQL安装和简单使用

PostgreSQL安装和简单使用 PostgreSQL安装和简单使用 作者:小P 来自:https://www.sodocs.net/doc/4b17025822.html, 摘要:PostgreSQL是现在比较流行的数据库之一,这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户。据我了解国内四大国产数据库,其中三个都是基于PostgreSQL开发的。并且,因为许可证的灵活,任何人都可以以任何目的免费使用,修改,和分发PostgreSQL,不管是私用,商用,还是学术研究使用。本文只是简单介绍一下postgresql的安装和简单的使用,语法方面涉及的比较少,以方便新手上路为目的。目录1.系统环境及安装方法;1.1 系统环境; 1.2 安装; 2.启动PostgreSQL 数据库服务器;2.1 在流行Linux发行版的启动方法; 2.2 关于PostgreSQL启动和存储目录; 3.创建用户;3.1 添加用户; 3.1.1 不带参数的创建用户; 3.1.2 为指定的主机和端口上创建用户; 3.1.3创建超级用户; 3.2 删除用户:3.2.1 删除本地的Postgres用户;

3.2.2 删除远程Postgres服务器上的用户; 4. 创建和删除数据库;4.1创建数据库 4.2 删除数据库 5.访问数据库5.1 激活数据库 5.2 帮助和退出数据库 6. Postgresql图形化管理工具pgAdmin3 ;6.1 安装;6.1.1 Ubuntu安装; 6.1.2 其它系统的安装;6.2 pgAdmin3的简单使用;6.2.1 pgAdmin3的启动; 6.2.2 连接已创建的数据库mydb ; 7. 创建和删除表;7.1 创建新表; 7.2 数据类型; 7.3 删除表;8. 向表中添加行;8.1 INSERT; 8.2 point类型输入; 8.3 COPY;9. 查询一个表;9.1 SELECT; 9.2 WHERE; 9.3 排序;10. 视图; 11. 更新行; 12. 删除行; 13. 关于本文; 14. 更新日志; 15. 参考文档; 16. 相关文档; +++++++++++++++++++++++++++++++++++++++++++

监视并记录Apache网站服务器的运行

监视并记录Apache网站服务器的运行 LogFormat 指令承诺你告诉Apache你想要记录要求的哪些方面。而你仍需附加的指令来告诉Apache在哪里记录那些信息,这在下一章中将会介绍。下面的例子显示了两种最受欢迎的格式的配置:一般日志格式和整合日志格式。当Apache收到一个要求,他将会用相应的要求属性来替代以%为前缀的每一个域。假如您正在使用一般日志格式,您的日志文件里 尽管有附件提供日志格式的详尽索引,下表描述了一些最为重要的域: # %h: 客户端(例如,扫瞄器)向服务器发出连接要求时自己的当时的IP地址或域名(需开启HostNameLookups)。 # %u: 使用方式认证用户时,记录下的用户的编号。 # %t: 服务器同意到连接要求的时刻。 # %r: 客户端发出的原始连接要求中的文本信息,包含所使用的方法。 # %>s: 服务器应答扫瞄器后的返回状态代码,200表示要求成功。. # %b: 服务器应答扫瞄器发出的单个要求的回传对象的内容大小(字节为单位),不统计数据包头部字节。 整合日志格式在一般日志格式的基础上扩展出了两个附加的域。定义为: # %{Referer}i: 连接要求数据包包头,包含指向当前页面的文档关联信息。 # %{User-agent}i: 用户代理连接要求数据包包头,包含客户扫瞄器的信息。 创建一个自定义日志文件 您可能会想创建Apache自带以外的新的日志文件。下面的例子将运用CustomLog来创建一个新的日志文件,并储存由一个之前定义好的日志格式,即前一章提到的common,所定义的信息。您还能够用格式本身的定义来替换昵称。一个附加的,更为简单的指令是Transferlog,它只同意最后一个LogFormat指令提供的定义。

PostgreSQL数据库使用pg_dump—psql 转储数据库

使用pg_dump/psql转储数据库 pg_dump/psql应用程序在pg安装目录的bin目录下。 只要在安装pg数据库的服务器上,且能够连通远程pg数据库,都可以实现数据导出。 一、pg_dump导出 pg_dump –h hostname –U name –p port –d database –f “file_name” -h: 数据库服务器地址 -U: 大写的U,用户名 -p: 端口号 -d: 数据库名 -f: 存储的文件路径和名称 pg_dump -h 110.84.129.40 -U postgres -p 3306 -d O2O -f "/home/wsxcde/database_file/O2O_bak_140430.dmp" 回城执行,会要求输入密码,正确,即可导出,没有进度条 远程导出300M的文件,大概时间10分钟。 以上命令是导出数据的全部对象,包括数据,对象(index,table,sequence,function等),但不包括blob的大对象,如果要导出大对象,要加上“-b”。 二、psql数据导入 psql –h localhost –U postgres –d new_db –f "xxx.dmp" -h: 数据库服务器地址,如果导入本机,直接使用localhost -U:大写的U,被导入数据库的用户名 -d: 数据库名,想导入的数据库,导入前请检查此数据库是否存在,不存在会报错 -f: 备份文件dmp的来源 psql–h localhost –U postgres –d O2O –f "/home/wsxcde/database_file/O2O_bak_140430.dmp" 300M的文件,导入时间不大约10多秒。

PostgreSQL+Linux 从入门到精通培训文档 2命令

本章大纲 1. 如何访问命令行 2. 使用命令行下的工具 非编辑模式 进入编辑模式 3. 正则表达式、管道和I/O 重定向 4. 管理用户账户 5. 文件访问控制 6. 管理进程 1,如何访问命令行 1.1 本地命令行的访问 在图形界面中,访问命令行的方法:打开Terminal,Console。或者:Ctrl+Alt+F1 ~ F6 1.2 使用SSH 访问命令行 同上 2,使用命令行下的工具 2.1 使用硬链接

硬链接,指在同一个文件系统中,对inode的引用,只要文件上存在至少1个硬链接,就可以找到对应的inode。 [digoal@digoal01 ~]$ echo "abc" > ./a [digoal@digoal01 ~]$ stat a File: `a' Size: 4 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 656374 Links: 1 -- 硬链接数量 Access: (0664/-rw-rw-r--) Uid: ( 500/ digoal) Gid: ( 500/ digoal) Access: 2017-04-11 13:18:14.292848716 +0800 Modify: 2017-04-11 13:18:14.292848716 +0800 Change: 2017-04-11 13:18:14.292848716 +0800 创建硬链接 [digoal@digoal01 ~]$ ln -L ./a ./b [digoal@digoal01 ~]$ stat a File: `a' Size: 4 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 656374 Links: 2 Access: (0664/-rw-rw-r--) Uid: ( 500/ digoal) Gid: ( 500/ digoal) Access: 2017-04-11 13:18:14.292848716 +0800 Modify: 2017-04-11 13:18:14.292848716 +0800 Change: 2017-04-11 13:18:34.631855044 +0800 [digoal@digoal01 ~]$ stat b File: `b' Size: 4 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 656374 Links: 2 Access: (0664/-rw-rw-r--) Uid: ( 500/ digoal) Gid: ( 500/ digoal) Access: 2017-04-11 13:18:14.292848716 +0800 Modify: 2017-04-11 13:18:14.292848716 +0800 Change: 2017-04-11 13:18:34.631855044 +0800 删除一个硬链接,还能通过其他硬链接找到对应的inode。 [digoal@digoal01 ~]$ rm a rm: remove regular file `a'? y [digoal@digoal01 ~]$ cat b abc 2.2 归档和解压 常用的归档命令tar 归档-c (常用压缩库-j bz2, -z gzip) [digoal@digoal01 ~]$ tar -jcvf test.tar.bz2 b

PostgreSQL详解

PostgreSQL数据库 一:PostgreSQL介绍 1、PostgreSQL就是以加州大学伯克利分校计算机系开发得 POSTGRES,现在已经更名为POSTGRES,版本 4、2为基础得对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其她现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新得数据类型、函数、操作符、聚集函数、索引方法、过程语言。并且,因为许可证得灵活,任何人都可以以任何目得免费使用、修改、与分发PostgreSQL,不管就是私用、商用、还就是学术研究使用。 2、PostgreSQL图标 3.PostgreSQL优点 有目前世界上最丰富得数据类型得支持支持,其中有些数据类型可以说连商业数据库都不具备,具体类型下文会说明、 PostgreSQL拥有一支非常活跃得开发队伍,而且在许多黑客得努力下,PostgreSQL 得质量日益提高 PostgreSQL 对接口得支持也就是非常丰富得,几乎支持所有类型得数据库客户端接口。这一点也可以说就是 PostgreSQL 一大优点。 4.PostgreSQL缺点 首先,早期得 PostgreSQL 继承了几乎所有 Ingres, Postgres, Postgres95 得问题:过于学院味,因为首先它得目得就是数据库研究,因此不论在稳定性, 性能还就是使用方方面面,长期以来一直没有得到重视,直到 PostgreSQL 项目开始以后,情况才越来越好,PostgreSQL 已经完全可以胜任任何中上规模范围内得应用范围得业务 其次,PostgreSQL 得确还欠缺一些比较高端得数据库管理系统需要得特性,比如数据库集群,更优良得管理工具与更加自动化得系统优化功能等提高数据库性能得机制等。 5.目前官方最新版本:9、3、2 二、windows下安装过程 1、开始安装:

PostgreSql 基础知识

PostgreSql 常见数据类型 1.CREATE TYPE命令增加新的数据类型 2.数据类型

3.数值类型 3. 整数类型 smallint, integer, bigint 类型存储各种范围的全部是数字的数,也就是没有小数部分的数字。试图存储超出范围以外的数值将导致一个错误。 常用的类型是 integer ,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用 smallint 。而只有在 integer 的范围不够的时候才使用 bigint ,因为前者绝对快得多。 bigint 类型可能不是在所有平台上都运转正确,因为它依赖编译器对八字节整数的支持。在那些没有八字节整数支持的机器上,bigint 的作用和 integer 一样(但是仍然占据八字节存储)。不过,我们目前还没听说过有这样的平台。 SQL 只声明了整数类型 integer(或 int) 和 smallint 。类型 bigint 和类型别名 int2, int4, int8 都是扩展,并且也在许多其它 SQL 数据库系统中使用。 4.任意精度数值 numeric 类型可以存储最多 1000 位精度的数字并且准确地进行计算。特别建议将它用于货币金额和其它要求精确计算的场合。不过,numeric 类型上的算术运算比整数类型要慢很多。 术语:一个 numeric 类型的标度(scale)是小数部分的位数,精度(precision)是全部数据位的数目,也就是小数点两边的位数总和。因此数字 23.5141 的精度为 6 而标度为 4 。你可以认为整数的标度为零。 numeric 字段的最大精度和最大标度都是可以配置的。要声明一个字段的类型为 numeric ,你可以用下面的语法: NUMERIC(precision, scale) 精度必须为正数,标度可以为零或者正数。另外, NUMERIC(precision) 选择了标度为 0 。不带任何精度与标度的声明 NUMERIC 则创建一个可以存储一个直到实现精度上限的任意精度和标度的数值,一个这样类型的字段将不会把输

PostgreSQL数据库安装教程

PostgreSQL数据库安装教程 (仅供参考) 最新更新:2014年08月27日 深圳市恩布网络科技有限公司 (内部技术文档)

目 录 1. Linux安装PostgreSQL数据库 (3) 1.1. 概述 (3) 1.2. 新建postgres用户和目录 (3) 1.3. 配置postgres用户的环境变量: (3) 1.4. yum安装 (3) 1.5. 初始化数据库目录 (3) 1.6. 给postgres赋予权限 (4) 1.7. 配置监听地址、端口 (4) 1.8. 配置支持远程连接 (4) 1.9. 设置开机启动 (4) 1.10. 启动服务 (4) 1.11. 修改postgres帐号密码 (4) 2. Windows安装PostgreSQL数据库 (5) 2.1. 概述 (5) 2.2. 安装 (5) 2.3. 配置监听地址、端口 (5) 2.4. 配置支持远程连接 (5) 3. 注意事项 (6) 4. 附录一:PostgreSQL数据库介绍 (6) 5. 附录二:PostgreSQL与MySQL比较 (6)

1.Linux安装PostgreSQL数据库 1.1.概述 以CentOS 6.4(或以上)X64(64位)版本,PostgreSQL8.4为例子说明。 本文仅供参考,如果安装不成功,或需要更多PostgreSQL技术资料,请自行上网搜索; 1.2.新建postgres用户和目录 mkdir /var/lib/pgsql groupadd postgres useradd ‐g postgres postgres 1.3.配置postgres用户的环境变量: cat >>/var/lib/pgsql/.bash_profile<

odbc安装文档

Linux/Unix下ODBC的安装 方法一: 先下载最新的unixODBC源码包(https://www.sodocs.net/doc/4b17025822.html,/unixODBC-2.2.1.tar.gz)放到/usr/local下,然后运行下述命令: 安装成功后,unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。 方法二: 下载rpm包进行安装,我们这里以Red Hat 7.3为例: unixODBC-2.2.0-5 RPM for i386(安装包及源码包) (ftp://https://www.sodocs.net/doc/4b17025822.html,/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-2 .2.0-5.i386.rpm、 ftp://https://www.sodocs.net/doc/4b17025822.html,/linux/redhat/7.3/en/os/i386/SRPMS/unixODBC-2.2.0-5.src.rpm)unixODBC-devel-2.2.0-5 RPM for i386 (ftp://https://www.sodocs.net/doc/4b17025822.html,/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-d evel-2.2.0-5.i386.rpm) 直接将unixODBC-2.2.0-5.i386.rpm和unixODBC-devel-2.2.0-5.i386.rpm装入系统就可以了,命令如下:

Linux/Unix下ODBC的配置 运行ODBCConfig程序(在/usr/bin下),如下图: 图一:ODBCConfig主窗口 和Windows下的ODBC设置窗口是不是很像?我想大家都能看懂吧。 第一步:安装数据库的ODBC驱动程序 Drivers这一栏中用来设置数据库的驱动程序,点击Add按钮,会出现下图:

PostgreSQL安装详细步骤(windows)

PostgreSQL安装详细步骤 PostgreSQL安装: 一、windows下安装过程 安装介质:postgresql-9.5.3-1-windows-x64,安装过程非常简单,过程如下:1、开始安装:

2、选择程序安装目录: 注:安装 PostgreSQL 的分区最好是 NTFS 格式的。PostgreSQL 首要任务是要保证数据的完整性,而 FAT 和 FAT32 文件系统不能提供这样的可靠性保障,而且 FAT 文件系统缺乏安全性保障,无法保证原始数据在未经授权的情况下被更改。此外,PostgreSQL 所使用的"多分点"功能完成表空间的这一特征在FAT文件系统下无法实现。 然而,在某些系统中,只有一种 FAT 分区,这种情况下,可以正常安装PostgreSQL,但不要进行数据库的初始化工作。安装完成后,在 FAT 分区上手动执行 initdb.exe 程序即可,但不能保证其安全性和可靠性,并且建立表空间也会失败。 3、选择数据存放目录:

4、输入数据库超级用户和创建的OS用户的密码

注:数据库超级用户是一个非管理员账户,这是为了减少黑客利用在 PostgreSQL 发现的缺陷对系统造成损害,因此需要对数据库超级用户设置密码,如下图所示,安装程序自动建立的服务用户的用户名默认为 postgres。 5、设置服务监听端口,默认为5432 6、选择运行时语言环境

注:选择数据库存储区域的运行时语言环境(字符编码格式)。 在选择语言环境时,若选择"default locale"会导致安装不正确;同时,PostgreSQL 不支持 GBK 和 GB18030 作为字符集,如果选择其它四个中文字符集:中文繁体香港(Chinese[Traditional], Hong Kong S.A.R.)、中文简体新加坡(Chinese[Simplified], Singapore)、中文繁体台湾 (Chinese[Traditional], Taiwan)和中文繁体澳门(Chinese[Traditional], Marco S.A.R.),会导致查询结果和排序效果不正确。建议选择"C",即不使用区域。 ----我选择了default localt,安装正确;建议选择default localt。 7、安装过程(2分钟)

psql常用命令大全

psql常用命令大全 \d [ table ] 列出数据库中的表,或(如果声明了)表table 的列/字段.如果表名是用统配符(“*”)声明的,列出所有表和表的列/字段信息. \da 列出所有可用聚集. \dd object 列出pg_description 里对声明的对象的描述,对象可以是一个表,表中的列/字段,类型,操作符或聚集. 小技巧:并非所有对象在pg_description 里有描述.此后期命令在快速获取Postgres 内部特性时很有用. \df 列出函数. \di 只列出索引. \do 只列出操作符. \ds 只列出序列. \dS 列出系统表和索引. \dt 只列出非系统表. \dT 列出类型. \e [ filename ] 编辑当前查询缓冲或文件filename 的内容. \E [ filename ] 编辑当前查询缓冲或文件filename 的内容并且在编辑结束后执行之. \f [ separator ] 设置域分隔符.缺省是单个空白. \g [ { filename | |command } ] 将当前查询输入缓冲送给后端并且(可选的)将输出放到filename 或通过管道将输出送给一个分离的Unix shell 用以执行command. \h [ command ] 给出声明的SQL 命令的语法帮助.如果command 不是一个定义的SQL 命令(或在psql 里没有文档),或没有声明command ,这时psql将列出可获得帮助的所有命令的列表.如果命令command 是一个通配符(“*”),则给出所有SQL 命令的语法帮助. \H 切换HTML3 输出.等效于-H 命令行选项. \i filename 从文件filename 中读取查询到输入缓冲.

PostgreSQL索引

什么是索引? 索引的目的及优缺点? PostgreSQL中的索引及分类 索引是指按表中某些关键属性或表达式建立元组的逻辑顺序,它是由一系列表元组的标识号组成的一个列表。 在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的分类 按存储结构区分:“聚集索引(又称聚类索引,簇集索引)”,“分聚集索引(非聚类索引,非簇集索引)” 按数据唯一性区分:“唯一索引”,“非唯一索引” 按键列个数区分:“单列索引”,“多列索引”。 为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引,例如: 在经常需要搜索的列上,可以加快搜索的速度; 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

MySQL和PostgreSQL两数据库的对决

MySQL和PostgreSQL两数据库的对决 在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。 一、前言 前一段时间,我曾经翻译过一篇将你的网站从MySQL改为PostgreSQL,其实当初我更感兴趣的是一个应用程序的后台数据库从MySQL转为PostgreSQL的具体操作,并没有关心MySQL和PostgreSQL的优劣,没想到反应出乎意料的大,因此我也就觉得有写这篇文章的必要了。 在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。 我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。 二、两者的共同优势 这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQLAB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。 三、两者不同的背景 MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。 这样的两种背景直接导致了各自固有的优点和缺点。 四、MySQL的主要优点 1、首先是速度,MySQL通常要比PostgreSQL快得多。MySQL自已也宣称速度是他们追求的主要目标之一,基于这个原因,MySQL在以前的文档中也曾经说过并不准备支持事务和触发器。但是在最新的文档中,我们看到MySQL4.0.2-alpha已经开始支持事务,而且在MySQL的TODO中,对触发器、约束这样的注定会降低速度的功能也列入了日程。但是,我们仍然有理由相信,

GP 常用数据库命令

Greenplum 日常简明维护手册 1.数据库启动:gpstart 常用参数:-a : 直接启动,不提示终端用户输入确认 -m:只启动master 实例,主要在故障处理时使用 访问单个数据实例: PGOPTIONS='-c gp_session_role=utility' psql template1 -p 5432 启动某个segment instance :pg_ctl stop/start -D /datadir/ 取端口号: select * from gp_segment_configuration 启动以后会在/tmp/ 下生成一个.lock 隐藏文件,记录主进程号。

2.数据库停止:gpstop: 常用可选参数:-a:直接停止,不提示终端用户输入确认 -m:只停止master 实例,与gpstart –m 对应使用 -f:停止数据库,中断所有数据库连接,回滚正在运 行的事务 -u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中 运行时参数,当改动参数配置时候使用。 连接数,重启 3.查看实例配置和状态 select * from gp_segment_configuration order by content ; select * from pg_filespace_entry ; 主要字段说明: Content:该字段相等的两个实例,是一对P(primary instance)和M(mirror Instance) Isprimary:实例是否作为primary instance 运行 Valid:实例是否有效,如处于false 状态,则说明该实例已经down 掉。 Port:实例运行的端口 Datadir:实例对应的数据目录 4.gpstate :显示Greenplum数据库运行状态,详细配置等信息 常用可选参数:-c:primary instance 和mirror instance 的对应关系 -m:只列出mirror 实例的状态和配置信息 -f:显示standby master 的详细信息 该命令默认列出数据库运行状态汇总信息,常用于日常巡检。 5.查看用户会话和提交的查询等信息 select * from pg_stat_activity该表能查看到当前数据库连接的IP 地址,用户

postgresql群集

注意事项:由于wordpress会自动将半角单引号转换为全角单引号,引用代码时需要手动修改为单引号 原理只是一个概念,可操作性不强,看了N多的半原理半细节的相关文章,却总是被各种各样的细节困惑住。为了自己下次能够快速的使用PostgreSQL,以流水帐的方式记录配置PostgreSQL集群的步骤,有些结论是自己猜想的或者引用的,以后发现错误再修正吧。 顺便发些感想(跳过下面一段,都是题外话,其实就是废话): 其实很多东西,从原理上说都很简单,几乎我们每个人都能说上一点。但是实际上,原理性的文章一般可操作性都不是很强。我个人觉得,如果目标是给自己看或者目标是让团队的人能够读懂并可以操作的文章,还是应该多一些细节描述,用文学的观点来说,就是表现手法要细腻一些。 Over,转入正题: 首先解释一下数据库集群:N个数据库堆到一起,找一个当个头头,管理所有的数据库并让它们协同工作。当然了,要不要找个头头,找几个头头,如何协作等等问题这些都可以商量和约定,因此,也就形成了不同的数据库集群。 如果数据库系统是PostgreSQL,这个集群就是PostgreSQL数据库集群。PostgreSQL数据库管理集群的方法有很多,有人提出了PL/Proxy方式的集群(这才是本文的重点)。这个PL/Proxy方式的集群是这样的:有很多安装了PostgreSQl数据库的计算机,有台计算机是头头,我们把这个头头叫做proxy,其他的叫做database0,database1……。当然名字叫什么是无所谓的,关键是有个是头头,其他的受头头指挥。 看个例子吧:以三台机器的集群为例子,看看PostgreSQL集群的架构是什么。proxy节点:proxy节点实际上也是一个PostgreSQL数据库节点,但是所有数据均不存放到proxy节点上,主要做三件事情: 1.接受用户的sql查询; 2.分析用户的sql查询并转换成集群上执行的SQL语句; 3.合并集群执行sql的结果,然后返回给用户。 说白了,就是把用户的sql语句交给database0,database1去执行,然后合并执行结果返回给用户。 database1节点和 database2节点: 就是普通的数据库节点,接收proxy节点的sql查询请求并返回结果给proxy 节点,是真正存放数据的节点。 没图没真相,还是来张集群结构图,结构更清晰一些: 看了原理图,是不是觉得很简单,稍微了解技术的人都能想到这种架构。既然这么简单,那就开始创建一个数据库集群吧,需求如下:

Postgresql存储过程

用PL/pgSQL写postgreSQL的存储过程 一、存储过程结构: Create or replace function 过程名(参数名参数类型,…..) returns 返回值类型as $body$ //声明变量 Declare 变量名变量类型; 如: flag Boolean; 变量赋值方式(变量名类型:=值;) 如: Str text :=值; / str text; str :=值; Begin 函数体; End; $body$ Language plpgsql; 二、变量类型: 除了postgresql内置的变量类型外,常用的还有 RECORD ,表示一条记录 三、连接字符: Postgresql存储过程中的连接字符不再是“+”,而是使用“||”。 四、控制结构: 1、if 条件(五种形式) IF ... THEN IF ... THEN ... ELSE IF ... THEN ... ELSE IF IF ... THEN ... ELSIF ... THEN ... ELSE IF ... THEN ... ELSEIF ... THEN ... ELSE(注:ELSEIF 是 ELSIF 的别名)

2、循环 使用LOOP,EXIT,CONTINUE,WHILE,和 FOR 语句,可以控制PL/pgSQL 函数重复一系列命令。 1)、LOOP [ <

greenplum基本操作及管理命令

第1章系统管理 1.1 GP服务启停 su - gpadmin gpstart #正常启动 gpstop #正常关闭 gpstop -M fast #快速关闭 gpstop –r #重启 gpstop –u #重新加载配置文件 1.2 登陆 psql gpdb psql -d gpdb -h gphostm -p 5432 -U gpadmin 1.3 查看segment配置 select * from gp_segment_configuration; 1.4 文件系统 select * from pg_filespace_entry; 1.5 列出所有数据库 psql –l

1.6 行表库最大尺寸 一个数据库最大尺寸?无限制(已存在有32TB 的数据库) 一个表的最大尺寸?32 TB 一行记录的最大尺寸?1.6 TB 一个字段的最大尺寸? 1 GB 一个表里最大行数?无限制 一个表里最大列数?250-1600 (与列类型有关) 一个表里的最大索引数量?无限制 当然,实际上没有真正的无限制,还是要受可用磁盘空间、可用内存/交换区的制约。事实上,当这些数值变得异常地大时,系统性能也会受很大影响。 表的最大尺寸32 TB 不需要操作系统对大文件的支持。大表用多个 1 GB 的文件存储,因此文件系统尺寸的限制是不重要的。 如果缺省的块大小增长到32K ,最大的表尺寸和最大列数还可以增加到四倍 1.7 存储空间 一个Postgres 数据库(存储一个文本文件)所占用的空间最多可能需要相当于这个文本文件自身大小5倍的磁盘空间。

第2章Psql操作 2.1 创建/删除用户 创建用户: createuser [-a] [-A] [-d] [-D] [-e] [-P] [-h 主机名] [-p port] 用户名参数说明: [-a]:允许创建其他用户,相当于创建一个超级用户; [-A]:不允许此用户创建其他用户; [-d]:允许此用户创建数据库; [-D]:不允许此用户创建数据库; [-e]:将执行过程显示到Shell上; [-P]:创建用户时,同时设置密码; [-h 主机名]:为某个主机上的Postgres创建用户; [-p port]:与-h参数一同使用,指定主机的端口。 createuser -h 172.28.18.51 -p 5000 -D -A -e testuser 创建超级用户:createuser -P -d -a -e testuser 删除用户: 命令:dropuser [-i] [-h] [-p] [-e] 用户名 参数说明: [ -i]:删除用户前,要求确认; [-h 主机名]:删除某个主机上的Postgres用户; [-p port]:与-h参数一同使用,指定主机的端口; [-e]:将执行过程显示到Shell上。 2.2 创建数据库 createdb -p 5432 -e -U gpadmin mydb

【VIP专享】postgresql数据库 pg

postgresql数据库 pg_hba.conf配置说明 当一个客户端应用与数据库服务器进行联接时,它声明它将以哪个 PostgreSQL 用户的名称进行联接,就象我们登录一台 Unix 计算机一样。在 SQL 环境里,活跃的数据库用户名决定数据库对象的各种访问权限 — 参阅Chapter 17获 取更多信息。因此,实际上我们要限制的是用户可以联接的数据库。 认证是数据库服务器建立客户端的标识,然后通过一些手段判断是否允 许此客户端应用(或者运行这个客户端应用的用户)与它所要求的用户名进行 联接的过程。 PostgreSQL 提供多种不同的客户端认证方式。认证某个特定客户端联接所使用的方法可以通过基于(客户端)的主机地址,数据库和用户的方式进行选择;一些认证方法还允许你通过用户名进行限制。 PostgreSQL 用户名在逻辑上是和服务器运行的操作系统用户名相互独立的。如果某个服务器的所有用户在那台服务器机器上也有帐号,那么给数据库用 户赋与操作系统用户名是有意义的。不过,一个接收远程访问的服务器很有可能有许多没有本地操作系统帐号的用户,因而在这种情况下数据库用户和操作系统用户名之间不必有任何联系。 pg_hba.conf 文件 客户端认证是由一个配置文件控制的,通常其文件名是 pg_hba.conf,存放在数据库集群的数据目录里。(HBA 的意思是 host-based authentication:基于主机的认证。)在initdb初始化数据目录的时候,它 会安装一个缺省的文件。不过我们也可以把认证配置文件放在其它地方;参阅hba_file 配置参数。 文件 pg_hba.conf 的常用格式是一套记录,每行一条。空白行行被忽略,井号( # )开头的注释也被忽略。一条记录是由若干用空格和/或 tab 分隔 的字段组成。如果字段用引号包围,那么它可以包含空白。记录不能跨行存在。 每条记录声明一种联接类型,一个客户端 IP 地址范围(如果和联接类型 相关的话),一个数据库名,一个用户名字,以及对匹配这些参数的联接使用的认证方法。第一条匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。这个处理过程没有"跨越"或者"回头"的说法:如果选择了一条记录而且认证失败,那么将不考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。 每条记录可以下面七种格式之一 local database user authentication-method [authentication-option] host database user CIDR-address authentication-method

Postgresql数据库 变量类型

一、数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明: 1. 整数类型: 类型smallint、integer和bigint存储各种范围的全部是数字的数,也就是没有小数部分的数字。试图存储超出范围以外的数值将导致一个错误。常用的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用smallint。而只有在integer的范围不够的时候才使用bigint,因为前者(integer)绝对快得多。 2. 任意精度数值: 类型numeric可以存储最多1000位精度的数字并且准确地进行计算。因此非常适合用于货币金额和其它要求计算准确的数量。不过,numeric类型上的算术运算比整数类型或者浮点数类型要慢很多。 numeric字段的最大精度和最大比例都是可以配置的。要声明一个类型为numeric的字段,你可以用下面的语法: NUMERIC(precision,scale) 比如数字23.5141的精度为6,而刻度为4。 在目前的PostgreSQL版本中,decimal和numeric是等效的。 3. 浮点数类型: 数据类型real和double是不准确的、牺牲精度的数字类型。不准确意味着一些数值不能准确地转换成内部格式并且是以近似的形式存储的,因此存储后再把数据打印出来可能显示一些缺失。 4. Serial(序号)类型: serial和bigserial类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。 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约束避免意外地插入重复的数值,但这个不是自动发生的。因此,如果你希望一个序列字段有一个唯一约束或者一个主键,那么你现在必须声明,就像其它数据类型一样。 还需要另外说明的是,一个serial类型创建的序列在其所属字段被删除时,该序列也将被自动删除,但是其它情况下是不会被删除的。因此,如果你想用同一个序列发生器同时给几个字段提供数据,那么就应该以独立对象的方式创建该序列发生器。 二、字符类型: 下面是PostgreSQL所支持的字符类型的列表和简单说明: SQL 定义了两种基本的字符类型,varchar(n)和char(n),这里的n是一个正整数。两种类型都可以存储最多n个字符长的字串,试图存储更长的字串到这些类型的字段里会产生一个错误,除非超出长度的字符都是空白,这种情况下该字串将被截断为最大长度。如果没有长度声明,char等于char(1),而varchar则可以接受任何长度的字串。 MyTest=> CREATE TABLE testtable(first_col varchar(2)); CREATE TABLE MyTest=> INSERT INTO testtable VALUES('333'); --插入字符串的长度,超过其字段定义的长度,因此报错。 ERROR: value too long for type character varying(2) --插入字符串中,超出字段定义长度的部分是空格,因此可以插入,但是空白符被截断。 MyTest=> INSERT INTO testtable VALUES('33 '); INSERT 0 1 MyTest=> SELECT * FROM testtable; first_col ----------- 33

相关主题