设为首页 收藏本站
查看: 1180|回复: 0

[经验分享] PostgreSQL入门资料

[复制链接]
发表于 2016-11-19 07:55:22 | 显示全部楼层 |阅读模式
  ① 到 http://www.postgresql.org/ 下载 PostgreSQL for Win 的 no installer 版本。现在最新的版本是8.2.5-1。直接解压就可以了。例如:
C:\postgreSQL
② 设置环境变量
C:> set PGHOME=C:\postgreSQL
C:> set PGDATA=%PGHOME%\data
C:> set PGLIB=%PGHOME%\lib
C:> set PGHOST=localhost
C:> set PATH=%PGHOME%\bin;%PATH%
  ③ initdb 初始化 数据库。
④ pg_ctl start 启动数据库
⑤ pg_ctl stop 停止数据库
⑥ post_svc -install 建立windows nt 服务(需要设置系统环境变量)
⑦ post_svc -remove 删除 windows nt 服务
⑧ 使用"createdb 库名" 新建数据库
⑨ 使用"createuser 用户名"创建数据库帐号
⑩ 使用"psql -h localhost -d 库名- U 用户名"进入数据库
  
提示:
对于入门者可以使用GUI管理工具 pgAdmin。
  另附:
  今天在整理资料的时候发现,Postgre出现了解压缩直接使用的版本,上边注明了for expert only. 呵呵,看来,不推荐生手使用。
为了试验一把,索性从它的官网上直接下载了一份postgresql-8.3.3-1-binaries-no-installer.zip
  1. 将其解压到d:\pgsql8.3.3
2. 设置环境变量,我不想直接添加,而是写到了一个batch文件里,名为pgenv.bat
set PGHOME=d:\pgsql8.3.3
set PATH=%PGHOME%\bin;%path%
set PGHOST=localhost
set PGLIB=%PGHOME%\lib
set PGDATA=%PGHOME%\data
  3.
执行 pgenv.bat
然后:
D:\pgsql8.3.3\bin>initdb
属于此数据库系统的文件宿主为用户 "******".
此用户也必须为服务器进程的宿主.
数据库簇将带有 locale Chinese_People's Republic of China.936 初始化.
initdb: locale Chinese_People's Republic of China.936 requires unsupported encod
ing GBK
Encoding GBK is not allowed as a server-side encoding.
Rerun initdb with a different locale selection.
  这上边的意思好像是说不直接支持cp936, GBK,晕。于是,强制执行:
D:\pgsql8.3.3\bin>initdb --locale=zh_CN
initdb: 无效的 locale 名字 "zh_CN"
initdb: 无效的 locale 名字 "zh_CN"
initdb: 无效的 locale 名字 "zh_CN"
initdb: 无效的 locale 名字 "zh_CN"
initdb: 无效的 locale 名字 "zh_CN"
initdb: 无效的 locale 名字 "zh_CN"
属于此数据库系统的文件宿主为用户 "hex".
此用户也必须为服务器进程的宿主.
数据库簇将带有 locale Chinese_People's Republic of China.936 初始化.
initdb: locale Chinese_People's Republic of China.936 requires unsupported encod
ing GBK
Encoding GBK is not allowed as a server-side encoding.
Rerun initdb with a different locale selection.
  还是不行,再换成下边的:
D:\pgsql8.3.3\bin>initdb --locale=C
属于此数据库系统的文件宿主为用户 "hex".
此用户也必须为服务器进程的宿主.
数据库簇将带有 locale C 初始化.
默认的数据库编码已经相应的设置为 SQL_ASCII.
The default text search configuration will be set to "english".
创建目录 d:/pgsql8.3.3/data ... 成功
creating subdirectories ... 成功
选择默认最大联接数 (max_connections) ... 100
selecting default shared_buffers/max_fsm_pages ... 32MB/204800
创建配置文件 ... 成功
在 d:/pgsql8.3.3/data/base/1 中创建 template1 数据库 ... 成功
initializing pg_authid ... 成功
initializing dependencies ... 成功
创建系统视图 ... 成功
loading system objects' descriptions ... 成功
创建字符集转换 ... 成功
creating dictionaries ... 成功
对内建对象设置权限 ... 成功
创建信息模式 ... 成功
清理数据库 template1 ... 成功
拷贝 template1 到 template0 ... 成功
copying template1 to postgres ... 成功
警告: 为本地连接启动了 "trust" 认证.
你可以通过编辑 pg_hba.conf 更改或你下
次运行 initdb 时使用 -A 选项.
Success. You can now start the database server using:
"postgres" -D "d:/pgsql8.3.3/data"
or
"pg_ctl" -D "d:/pgsql8.3.3/data" -l logfile start
  
本文来自: (www.91linux.com) 详细出处参考:http://www.91linux.com/html/article/database/PostgreSQL/20090331/16326.html
  我下载了PostgreSQL7.3.4,是源代码,保存为“/opt/lin_app02/tmp/download/PostgreSQL/R1/postgresql-7.3.4.tar.gz”。下载后,我在这个目录下开了终端(rxvt),执行命令:
[code:1:cc99a78c8e]
[iyunv@TFW-RFL40F R1]# tar zxvfp ./postgresql-7.3.4.tar.gz
[/code:1:cc99a78c8e]
得到一个目录“postgresql-7.3.4”。
[code:1:cc99a78c8e]
[iyunv@TFW-RFL40F R1]# cd postgresql-7.3.4
[iyunv@TFW-RFL40F postgresql-7.3.4]# ./configure --prefix=/opt/lin_app02/postgres --enable-locale --enable-multibyte --with-perl --with-odbc --with-tcl
[/code:1:cc99a78c8e]
......
对上面一步的说明:
./configure
configure不加任何选项,系统将按默认的设置安装postgresql,查看configre的相关选项可以使用:configure -help

一些最常用的如下:

--prefix=BASEDIR
为安装 PostgreSQL 选择一个不同的基础路径。缺省是 /usr/local/pgsql。

--enable-locale
如果你想用本地化支持。

--enable-multibyte
允许使用多字节字符编码。这个选项主要用于象日语,韩语或中文这样的语言。

--with-perl
添加 Perl 模块接口。请注意 Perl 接口将安装到 Perl 模块的常用位置(典型的是在 /usr/lib/perl),所以要成功使用这个选项,你必须有 root 权限。

--with-odbc
制作 ODBC 驱动包。
  --with-tcl
制作 Tcl/Tk 需要的接口库和程序,包括 libpgtcl,pgtclsh,和 pgtksh。
  这些编译参数告诉编译器如何编译PostgreSQL:
[code:1:cc99a78c8e]
[iyunv@TFW-RFL40F postgresql-7.3.4]# make
[/code:1:cc99a78c8e]
......
[code:1:cc99a78c8e]
[iyunv@TFW-RFL40F postgresql-7.3.4]# make install
[/code:1:cc99a78c8e]
......
中间不报错的话,安装就完成了。
  
初始化
  
创建一个存放数据库文件的目录:
[code:1:cc99a78c8e]
[iyunv@TFW-RFL40F postgresql-7.3.4]# mkdir /opt/lin_app02/postgre-data
[/code:1:cc99a78c8e]
  下面要设置环境变量。由于安全原因,PostgreSQL是不让“root”等特权用户用的。为了方便,我就用日常工作的“typhoon”身份管理PostgreSQL,但是建议大家为管理PostgreSQL新创建一个用户。为了方便,我直接修改了“/etc/profile”,但是建议修改个人主目录下的“.bash_profile”。
  我在环境变量文件里添加了如下内容:
[code:1:cc99a78c8e]
########################################
# PostgreSQL
LD_LIBRARY_PATH=/opt/lin_app02/postgres/lib
export LD_LIBRARY_PATH
PGLIB=/opt/lin_app02/postgres/lib
PGDATA=/opt/lin_app02/postgre-data
PATH=$PATH:/opt/lin_app02/postgres/bin
MANPATH=$MANPATH:/opt/lin_app02/postgres/man
export PGLIB PGDATA PATH MANPATH
########################################
[/code:1:cc99a78c8e]
看着挺麻烦,其实就是下面的格式:
LD_LIBRARY_PATH=<--prefix所指的地方>/lib
export LD_LIBRARY_PATH
PGLIB=<--prefix所指的地方>/lib
PGDATA=<你放数据库文件的地方>
PATH=$PATH:<--prefix所指的地方>/bin
MANPATH=$MANPATH:<--prefix所指的地方>/man
export PGLIB PGDATA PATH MANPATH
  刚才提到的那些目录都是在“root”身份下创建的,要让它们能为“typhoon”所用,还得改权限:
[code:1:cc99a78c8e]
[iyunv@TFW-RFL40F postgresql-7.3.4]# chown -R typhoon.typhoon /opt/lin_app02/postgre*
[/code:1:cc99a78c8e]
即:
chown -R <PostgreSQL管理员所在组>.<PostgreSQL管理员用户名> <--prefix所指的地方>
chown -R <PostgreSQL管理员所在组>.<PostgreSQL管理员用户名> <你放数据库文件的地方>
  然后我关闭了X,并注销,再重新登录,以使环境变量生效。
  [code:1:cc99a78c8e]
[typhoon@TFW-RFL40F typhoon]$ initdb
[/code:1:cc99a78c8e]
这个命令用来初始化PostgreSQL。请确保执行前你放数据库文件的地方是空的。
  初始化后会自动创建数据库的超级用户,用户名与安装、执行初始化的操作系统用户同名。可能还会自动创建一个与用户名同名的数据库。在我这里就是用户“typhoon”和数据库“typhoon”。直接执行“<--prefix所指的地方>/bin/psql”就能登录进去。“\q”可以退回操作系统的shell。如果这个数据库没有自动生成,请执行“<--prefix所指的地方>/bin/createdb [用户名]”,即以你的用户名创建一个数据库。这个数据库就相当于你的“Home”,没这个数据库,做某些事情就不方便。
  
启停方法
  
[code:1:cc99a78c8e]
[typhoon@TFW-RFL40F typhoon]$ postmaster -i -D ./postgre-data/&
[/code:1:cc99a78c8e]
postmaster -i -D <database-path>&
......
这是开始数据库系统的服务。后面那个“&”最好带上,否则,......:-D
  上面说的启动方法是正规方法,PostgreSQL还提供了封装的控制脚本“<--prefix所指的地方>/bin/pg_ctl”。
[code:1:cc99a78c8e]
[typhoon@TFW-RFL40F typhoon]$ pg_ctl -l ./123/pg.log start
[/code:1:cc99a78c8e]
如果有“-l 文件名”这个参数,所有的错误都会被记录到这个文件里。
  [code:1:cc99a78c8e]
[typhoon@TFW-RFL40F typhoon]$ pg_ctl stop
[/code:1:cc99a78c8e]
停止服务。既然是停止,就别管什么记录文件了。
  [code:1:cc99a78c8e]
[typhoon@TFW-RFL40F typhoon]$ pg_ctl -l ./123/pg.log restart
[/code:1:cc99a78c8e]
相当于先“stop”再“start”。
  [code:1:cc99a78c8e]
[typhoon@TFW-RFL40F typhoon]$ pg_ctl reload
[/code:1:cc99a78c8e]
如果对配置文件做了修改,想不中断服务而立即生效,就这样。
  注意:PostgreSQL管理员最好从“Login:”、xdm或kdm登录系统,因为如果“su”过去操作将不能正常执行。
  和大家共同进步。下面是我安装时参考的帖子:
http://www.freelamp.com/new/publish/1022414614/index_html
http://iyunv.com/jh/18/546.html
http://iyunv.com/jh/18/548.html
我四处查找链接里所说的“egcs-c++”,也没下载到,后来才知道“egcs-c++”已经被整合进高版本的“gcc”里了。我的“gcc”是3.2的。大家的“gcc”如果高于2.8,也就不要再到处找“egcs-c++”了。
  
安全管理
  
初始化后,在数据库目录里会有这样两个文件:“postgresql.conf”和“pg_hba.conf”。
  修改“postgresql.conf”第30行左右的地方为顶格“tcpip_socket = true”,以允许网络访问。
  “pg_hba.conf”,基于主机的访问控制(Host Based Access)。左边有“#”的内容都是被注释掉的,起说明或参考等作用。
  我以我现在的文件为例做说明(里面的中文为我的说明):
[code:1:cc99a78c8e]
# PostgreSQL Client Authentication Configuration File
# ===================================================
#
# Refer to the PostgreSQL Administrator's Guide, chapter "Client
# Authentication" for a complete description. A short synopsis
# follows.
#
# This file controls: which hosts are allowed to connect, how clients
# are authenticated, which PostgreSQL user names they can use, which
# databases they can access. Records take one of three forms:
#
# local DATABASE USER METHOD [OPTION]
# host DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]
# hostssl DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]
#
# (The uppercase quantities should be replaced by actual values.)
# DATABASE can be "all", "sameuser", "samegroup", a database name (or
# a comma-separated list thereof), or a file name prefixed with "@".
# USER can be "all", an actual user name or a group name prefixed with
# "+" or a list containing either. IP-ADDRESS and IP-MASK specify the
# set of hosts the record matches. METHOD can be "trust", "reject",
# "md5", "crypt", "password", "krb4", "krb5", "ident", or "pam". Note
# that "password" uses clear-text passwords; "md5" is preferred for
# encrypted passwords. OPTION is the ident map or the name of the PAM
# service.
#
# This file is read on server startup and when the postmaster receives
# a SIGHUP signal. If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect, or use
# "pg_ctl reload".
  # Put your actual configuration here
# ----------------------------------
#
# CAUTION: The default configuration allows any local user to connect
# using any PostgreSQL user name, including the superuser, over either
# Unix-domain sockets or TCP/IP. If you are on a multiple-user
# machine, the default configuration is probably too liberal for you.
# Change it to use something other than "trust" authentication.
#
# If you want to allow non-local connections, you need to add more
# "host" records. Also, remember TCP/IP connections are only enabled
# if you enable "tcpip_socket" in postgresql.conf.
  # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
#访问来源 数据库 用户 IP-地址 子网掩码 认证方式
  local typhoon typhoon md5
#对于来自本地的访问,数据库“typhoon”对用户“typhoon”采用“md5”加密口令认证
  local typhoon all reject
#对于来自本地的访问,数据库“typhoon”对上面没提到的所有用户无条件拒绝认证
  host typhoon typhoon 255.255.255.255 127.0.0.1 md5
#对于来网络的访问,数据库“typhoon”对用户“typhoon”,如果提出访问的是本机,采用“md5”加密口令认证
  host typhoon all 0.0.0.0 0.0.0.0 reject
#对于来网络的访问,数据库“typhoon”对上面没提到的所有用户,不管提出访问的哪台机器,也不管它来自哪个子网,无条件拒绝认证
  local all all md5
#对于来自本地的访问,上面没提到的数据库对上面没提到的所有用户采用“md5”加密口令认证
host all all 0.0.0.0 0.0.0.0 md5
#对于来网络的访问,数上面没提到的数据库对上面没提到的所有用户,不管提出访问的哪台机器,也不管它来自哪个子网,采用“md5”加密口令认证
  ########################################
# Others are all denied 其他访问一概无条件拒绝
local all all reject
host all all 0.0.0.0 0.0.0.0 teject
########################################
  ########################################
# All denied permissed, not safe
# 对所有访问都信任,太不安全,被我禁止掉了,只作为参考
#local all all trust
#host all all 0.0.0.0 0.0.0.0 trust
########################################
[/code:1:cc99a78c8e]
这些认证的规则是从上到下一条一条加载的,要注意的是,里面的“all”并不是真正意义上的“所有”,只是前面的规定中没有提到的那部分。个人感觉用“other”也许更恰当。
  这样,最终的结果是:
所有用户都能通过加密口令访问“typhoon”以外的数据库,但是只有用户“typhoon”能以加密口令访问数据库“typhoon”。
  
操作篇
  
[客户端基本连接操作]====================
*查看PostgreSQL的系统表:
(摸索/查找中)
  *终端登录:
psql -l[主机名/IP] -d[数据库名] -U[用户名]
  *连接到另外一个数据库:
\c [数据库名]
  *断开终端:
\q
========================================
  [基本用户管理]==========================
*添加用户:
create user [用户名];
  *修改用户密码:
alter user [用户名] with password [口令];
  *删除用户:
drop user [用户名];
  *查看用户信息:
(摸索/查找中)
========================================
  [基本数据库操作]========================
*创建数据库:
create database [数据库名];
  *查看数据库列表:
\d
  *删除数据库:
drop database [数据库名];
  *修改数据库的所有者:
(摸索/查找中)
========================================
  [数据库内基本操作]======================
*给予某用户在某数据库创建表的授权:
(摸索/查找中)
  *收回某用户在某数据库创建表的授权:
(摸索/查找中)
  创建表:
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>);
  *查看表名列表:
\d
  *查看某个表的状况:
\d [表名]
  *重命名一个表:
alter table [表名A] rename to [表名B];
  *修改表的所有者:
(摸索/查找中)
  *删除一个表:
drop table [表名];
========================================
  [表内基本操作]==========================
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];
  *删除表中的字段:
alter table [表名] drop column [字段名];
  *重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];
  *给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];
  *去除缺省值:
alter table [表名] alter column [字段名] drop default;
  *将已存在的表里某列设置为主码:
(摸索/查找中)
  *将已存在的表里某几列设置为主码:
(摸索/查找中)
  *取消某列的主码资格:
(摸索/查找中)
  在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
  修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];
  删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
========================================
  [备份]==================================
备份一个数据库:
pg_dump 数据库名 > 备份文件
  把备份文件导回原数据库或导入新数据库:
cat 备份文件 | psql 数据库名
最好先把这个数据库的认证改为“trust”。
  备份一个表:
pg_dump -t table1 dbname > bk1.sql
========================================
  
ADD
  
摘自[http://cn.tech.yahoo.com/031118/142/1w6ex_3.html]:
你需要为psql程序带入参数:psql -d databasename -U username -W。-d用来指定数据库,-U指定用户名,而-W要求psql提示你输入一个口令。当你成功地运行了psql以后,将每个CREATE TABLE查询单独地粘贴到psql中并按回车键。如果在你的SQL语句中有错误,psql会给出相应提示。通过逐一地加入每一个表,你会得到每一个表的调试信息,这样做起来相当简单。如果,在你输入了表的定义之后,你发现遗漏了一两个字段,有两种方法能
文章来源于http://www.lupaworld.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302331-1-1.html 上篇帖子: postgresql常用操作整理 下篇帖子: 安装使用 Postgresql 9.1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表