进入/opt/pgsql-917目录可以看到安装后的postgresql的文件。
linux下安装PostgreSQL数据库步骤如下:
0编译环境
Linux: CentOS 55
gcc: 412
1 安装PostgreSQL
1) 解压postgresql-917tarbz2
#tar jxvf postgresql-917tarbz2
2) 进入解压后的postgresql-917目录
#cd postgresql-917
3) 编译postgresql源码
#/configure --prefix=/opt/pgsql-917
#make
#make install
至此,完成postgresql的安装。进入/opt/pgsql-917目录可以看到安装后的postgresql的文件。
#ls /opt/pgsql-917
2创建postgresql数据库
1) 创建postgres用户
#useradd postgres
修改postgres密码
#passwd postgres
2) 设置postgres用户的环境变量
切换到postgres用户
#su - postgres
进入postgres的主目录
#cd ~
编辑~/bash_profile文件
#vi ~/bash_profile
设置以下的环境变量
export PGHOME=/opt/pgsql-917
export PGDATA=~/data
保存,退出vi。执行以下命令,使环境变量生效
#source ~/bash_profile
3) 初始化postgres数据库
#initdb
至此,完成postgres数据库的初始化。
4) 启动postgres数据库实例
#pg_ctl start
可以看到postgresql数据库实例已经启动,通过下面的命令可以查看系统中运行的postgres进程
#ps -ef | grep postgres
5) 连接postgresql数据库
#psql -h 127001 -d postgres -U postgres
6) 停止postgresql数据库实例
#pg_ctl stop
#ps -ef | grep postgres
可以看到已经没有postgres进程
3 设置PostgreSQL开机自启动
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下
linux文件即为linux系统上的启动脚本
1)修改linux文件属性,添加X属性
#chmod a+x linux
2) 复制linux文件到/etc/initd目录下,更名为postgresql
#cp linux /etc/initd/postgresql
3)修改/etc/initd/postgresql文件的两个变量
prefix设置为postgresql的安装路径:/opt/pgsql-912
PGDATA设置为postgresql的数据目录路径:
4) 执行service postgresql start,就可以启动PostgreSQL服务
#service postgresql start
5)设置postgresql服务开机自启动
#chkconfig --add postgresql
执行上面的命令,就可以实现postgresql服务的开机自启动。
这个也是从 oid2name 中扒出来的:
[postgres@localhost bin]$ /oid2name -d postgres
From database "postgres":
now:
SELECT pg_catalogpg_relation_filenode(coid) as "Filenode", relname as "Table Name" FROM pg_class c LEFT JOIN pg_catalogpg_namespace n ON noid = crelnamespace LEFT JOIN pg_catalogpg_database d ON ddatname = pg_catalogcurrent_database(),pg_catalogpg_tablespace t WHERE relkind IN ('r') AND nnspname NOT IN ('pg_catalog', 'information_schema') AND nnspname !~ '^pg_toast' AND toid = CASE WHEN reltablespace <> 0 THEN reltablespace ELSE dattablespace END ORDER BY relname
Filenode Table Name
----------------------
24608 gaotab
24604 testtab
[postgres@localhost bin]$
执行结果就是这样,这里没有用我给出的 postgres 数据库名 ,而是用了 pg_catalogcurrent_database()
我把格式整理一下,并且把数据库名换成我想要的 ’postgres‘,当然,如果有其他数据库,换其他的名字就可以了。
SELECT
pg_catalogpg_relation_filenode(coid) as "Filenode",
relname as "Table Name"
FROM
pg_class c
LEFT JOIN pg_catalogpg_namespace n ON noid = crelnamespace
LEFT JOIN pg_catalogpg_database d ON ddatname = 'postgres',
pg_catalogpg_tablespace t
WHERE
relkind IN ('r')
AND nnspname NOT IN ('pg_catalog', 'information_schema')
AND nnspname !~ '^pg_toast'
AND toid = CASE WHEN reltablespace <> 0 THEN reltablespace ELSE dattablespace END
ORDER BY
relname
其实 t 是没有必要的,还可以再简化:
SELECT
pg_catalogpg_relation_filenode(coid) as "Filenode",
relname as "Table Name"
FROM
pg_class c
LEFT JOIN pg_catalogpg_namespace n ON noid = crelnamespace
LEFT JOIN pg_catalogpg_database d ON ddatname = 'postgres'
WHERE
relkind IN ('r')
AND nnspname NOT IN ('pg_catalog', 'information_schema')
AND nnspname !~ '^pg_toast'
ORDER BY
relname
这个也是从
oid2name
中扒出来的:
[postgres@localhost
bin]$
/oid2name
-d
postgres
From
database
"postgres":
now:
SELECT
pg_catalogpg_relation_filenode(coid)
as
"Filenode",
relname
as
"Table
Name"
FROM
pg_class
c
LEFT
JOIN
pg_catalogpg_namespace
n
ON
noid
=
crelnamespace
LEFT
JOIN
pg_catalogpg_database
d
ON
ddatname
=
pg_catalogcurrent_database(),pg_catalogpg_tablespace
t
WHERE
relkind
IN
('r')
AND
nnspname
NOT
IN
('pg_catalog',
'information_schema')
AND
nnspname
!~
'^pg_toast'
AND
toid
=
CASE
WHEN
reltablespace
<>
0
THEN
reltablespace
ELSE
dattablespace
END
ORDER
BY
relname
Filenode
Table
Name
----------------------
24608
gaotab
24604
testtab
[postgres@localhost
bin]$
执行结果就是这样,这里没有用我给出的
postgres
数据库名
,而是用了
pg_catalogcurrent_database()
我把格式整理一下,并且把数据库名换成我想要的
’postgres‘,当然,如果有其他数据库,换其他的名字就可以了。
SELECT
pg_catalogpg_relation_filenode(coid)
as
"Filenode",
relname
as
"Table
Name"
FROM
pg_class
c
LEFT
JOIN
pg_catalogpg_namespace
n
ON
noid
=
crelnamespace
LEFT
JOIN
pg_catalogpg_database
d
ON
ddatname
=
'postgres',
pg_catalogpg_tablespace
t
WHERE
relkind
IN
('r')
AND
nnspname
NOT
IN
('pg_catalog',
'information_schema')
AND
nnspname
!~
'^pg_toast'
AND
toid
=
CASE
WHEN
reltablespace
<>
0
THEN
reltablespace
ELSE
dattablespace
END
ORDER
BY
relname
其实
t
是没有必要的,还可以再简化:
SELECT
pg_catalogpg_relation_filenode(coid)
as
"Filenode",
relname
as
"Table
Name"
FROM
pg_class
c
LEFT
JOIN
pg_catalogpg_namespace
n
ON
noid
=
crelnamespace
LEFT
JOIN
pg_catalogpg_database
d
ON
ddatname
=
'postgres'
WHERE
relkind
IN
('r')
AND
nnspname
NOT
IN
('pg_catalog',
'information_schema')
AND
nnspname
!~
'^pg_toast'
ORDER
BY
relname
在数据库运维工作中,经常会有数据目录使用率较高需要调整的情况,通常会给数据库建立多个表空间,
并分别位于不同的盘上,这时需要做的工作就是调整库中现有表和索引的表空间,下面简单总结下这块维护
工作的内容,以下都是基于 PostgreSQL 901 做的测试。
一 查询某个表所在表空间的简单方法
PostgreSQL 提供类似" \ "命令很方便得到相关信息,命令如下:
skytf=> \d test_2
Table "skytftest_2"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer |
obj_id | integer | not null
name | character varying(64) |
Indexes:
"idx_hash_name" hash (name)
"idx_test_2" btree (id, obj_id)
Tablespace: "tbs_skytf_idx"
备注:如果这个表的表空间为当前数据库的默认表空间,那么上面则不会显示 Tablespace 信息,
相反,则会显示这张有的表空间,例如上面的表 test_2 的表空间为 tbs_skytf_idx,而
表空间 "tbs_skytf_idx" 不是数据库 skytf 的默认表空间, 那么如何查询数据库的默认
表空间呢,可以通过以下命令查询。
--11 查询数据库的默认表空间
skytf=> select datname,dattablespace from pg_database where datname='skytf';
datname | dattablespace
---------+---------------
skytf | 14203070
(1 row)
skytf=> select oid,spcname from pg_tablespace where oid=14203070;
oid | spcname
----------+-----------
14203070 | tbs_skytf
(1 row)
备注:通过以上查出数据库 skytf 的默认表空间为 tbs_skytf。
二 批量查询数据库表和索引的表空间
--21 查询表和索引所在的表空间
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(aoid)), tbspcname
from pg_class a, pg_tablespace tb
where areltablespace = tboid
and arelkind in ('r', 'i')
order by arelpages desc;
备注:上面只取了部分结果,这个查询能够查询表和索引所处的表空间,但是有一点需要注意,这个查询
仅显示表空间不是数据库默认表空间的数据库对像,而我们通常需要查出位于数据库默认表空间的
对像,显然上面的查询不是我们想要的,接下来看另一个查询。
--22 查询位于默认数据库表空间的对像
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(aoid)),reltablespace,relowner
from pg_class a
where arelkind in ('r', 'i')
and reltablespace='0'
order by arelpages desc;
备注:这个查询加入限制条件 reltablespace='0',即可查找出位于当前数据库默认表空间的
数据库表和索引。 通常这才是我们想要的结果,接下来可以把部分表转移到其它表空间上去,转移
的方法可以用 "ALTER TABLE move tablespace "或者重建索引移表空间等方法,这里不详细介绍。
--23 查询在某个表空间上的对像
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(aoid)),reltablespace,relowner
from pg_class a, pg_tablespace tb
where arelkind in ('r', 'i')
and areltablespace=tboid
and tbspcname='tablespace_name'
order by arelpages desc;
--24 手册上对于 pgclass 视图的 reltablespace 字段解释
The tablespace in which this relation is stored If zero, the database is default tablespace is
implied (Not meaningful if the relation has no on-disk file)
以上就是关于linux 下怎么看postgresql安装到哪个目录了全部的内容,包括:linux 下怎么看postgresql安装到哪个目录了、如何查PostgreSQL 数据库中所有的表、如何查PostgreSQL 数据库中所有的表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)