dawn-liu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

远程登陆

psql -h 主机 -U 用户  -p端口  -W   -d 数据库  #-W表示密码,例如:psql -h 192.168.137.3 -U postgres  -p 5432 -W -d postgres

 远程执行命令

psql -h 192.168.137.3 -p 5432 postgres postgres -A -c "select * from test limit 10"

 

查看所有数据库,owner,字符编码,访问权限

\l

切换数据库

\c postgres

查看所有数据库信息

select * from pg_database;  --用于navicate

 查看某个库的大小

select pg_size_pretty(pg_database_size('库名'));

 

查看当前库里面的所有表

\dt

查看表结构

\d  test
select * from information_schema.columns where table_schema='public' and table_name='表名'; #使用navicate查看表结构

修改表的属主

alter table 表名 owner to 用户;

查看某个表的大小

select pg_table_size('表名');

查看表的主键

SELECT pg_constraint.conname AS pk_name
FROM pg_constraint INNER JOIN pg_class ON pg_constraint.conrelid = pg_class.oid
WHERE  pg_class.relname = 'landing_welcome_cdl' AND pg_constraint.contype = 'p';

 

 

 

显示所有用户

\du
select * from pg_user; #navicate客户端上面使用

查看当前用户

testdb=> select user;
 user 
------
 test
(1 row)

修改数据库的拥有者

postgres=# alter database devdb owner to devdb;
ALTER DATABASE

#查询数据库默认表空间

postgres=# select d.datname,p.spcname from pg_database d, pg_tablespace p where d.datname='devdb' and p.oid = d.dattablespace;
 datname |  spcname   
---------+------------
 devdb   | pg_default
(1 row)

#修改数据库的表空间

ALTER DATABASE 数据库名称 SET TABLESPACE 表空间名称;

需注意三个问题:
1 不能在当前数据库下面修改
2 数据库不能存在表或者索引已经指定默认的表空间
3 必须没有人连接这个数据库

 创建用户

create user username with password '****';

删除用户

drop user username;

修改用户密码

alter user postgres with password 'password';

创建数据库

 create database dbtest owner username; -- 创建数据库指定所属者

修改数据库名称

alter database devdb rename to dev_update;

 

将数据库权限赋给某个用户

grant all on database dbtest to username; -- 将dbtest所有权限赋值给username

schema是啥

schema概念有点像命名空间或者把它想像成一个文件系统中的目录,差别就是这个schema下不能再有schema嵌套.
各个对象比如表、函数等存放在各个schema下,同一个schema下不能有重复的对象名字,但在不同schema下可以重复.

 创建schema

create schema test; #默认谁创建owner就是谁

创建schema并指定owner

create schema test authorization user;

修改schema的owner

alter schema test owner to other_user;

删除schema

drop schema test;

 删除schema和它下面的对象(表)

drop schema test cascade;

 schema下对象的操作

db01=# create table schema01.t1(id int);  #创建对象
CREATE TABLE
db01=# insert into schema01.t1 values(1); #插入一个值
INSERT 0 1
db01=# select * from t1;                   #查询,直接查对象报错
ERROR:  relation "t1" does not exist
LINE 1: select * from t1;
                      ^
db01=# select * from schema01.t1;        #查询加上shema.对象
 id
----
  1
(1 row)
db01=# select * from db01.schema01.t1;  #某个数据库下面的shema的对象
 id
----
  1
(1 row)

 

查看schema

\dn;

 

查看表,索引的大小

select pg_size_pretty(pg_relation_size('cdp_order_item')); #查看表的大小

select pg_size_pretty(pg_indexes_size('cdp_order_item'));   #查看索引的大小

 查看表对应的索引和schema

select schemaname,relname,indexrelname  from pg_stat_user_indexes limit 20;  #schema,表名,索引名

 

 

查看当前用户和当前库

#查看当前用户
postgres=> select user;
  user  
--------
 dbuser
(1 row)

#查看当前库
postgres=> select current_database();
 current_database 
------------------
 postgres
(1 row)

赋予所有用户对表的所有权限

grant all on test to public;

 注意:

可以建大写的表名但是要加上双引号,而且使用工具navicat点击的时候显示没有权限,但是可以通过命令查看

 经常执行postgres命令的时候会杂乱显示,可以设置竖排查看

\x

 定制命令,进入数据库使用 :命令 查询

vim ~/.psqlrc

#查询等待事件
\set wait_event 'select pid, usename, datname, query, client_addr from pg_stat_activity where pid <> pg_backend_pid() and wait_event is not null order by wait_event_type;'
#查询数据库连接数
\set connections_jqs 'select usename, datname, client_addr, count(*) from pg_stat_activity where pid <> pg_backend_pid() group by 1,2,3 order by 1,2,4 desc;'
#查询活动会话
\set active_session_jqs 'select pid, usename, datname, query, client_addr from pg_stat_activity where pid <> pg_backend_pid() and state=\' active\' order by query;'

定制命令使用:

postgres=# :active_session_jqs;
 pid | usename | datname | query | client_addr 
-----+---------+---------+-------+-------------
(0 rows)

postgres=# :wait_event;
 pid  | usename  | datname  |                                  query                                   |  client_addr  
------+----------+----------+--------------------------------------------------------------------------+---------------
 7136 |          |          |                                                                          | 
 7138 | postgres |          |                                                                          | 
 7134 |          |          |                                                                          | 
 7133 |          |          |                                                                          | 
 7135 |          |          |                                                                          | 
 8400 | postgres | postgres |                                                                         +| 192.168.137.1
      |          |          | SELECT                                                                  +| 
      |          |          |     db.oid as did, db.datname, db.datallowconn,                         +| 
      |          |          |     pg_encoding_to_char(db.encoding) AS serverencoding,                 +| 
      |          |          |     has_database_privilege(db.oid, 'CREATE') as cancreate, datlastsysoid+| 
      |          |          | FROM                                                                    +| 
      |          |          |     pg_database db                                                      +| 
      |          |          | WHERE db.oid = 13287                                                     | 
(6 rows)

postgres=# :connections_jps;
ERROR:  syntax error at or near ":"
LINE 1: :connections_jps;
        ^
postgres=# :connections_jqs;  #没弄明白为啥第二次可以得出结果
 usename  | datname  |  client_addr  | count 
----------+----------+---------------+-------
 postgres | postgres | 192.168.137.1 |     1
 postgres |          |               |     1
          |          |               |     4
(3 rows)

修改时区的三种方式

--修改时区的方法
1. 全局参数

postgres配置文件修改时区:168服务器

grep timezone postgresql.conf

  log_timezone = 'UTC'
  timezone = 'UTC'

#重新加载生效
 cd /data/postgres/
 ./bin/pg_ctl -D ./data reload

 
2. 数据库级配置
alter database dbname set timezone='UTC';
 
pipeline=# select * from pg_db_role_setting ;
 setdatabase | setrole |              setconfig               
-------------+---------+--------------------------------------
       14930 |       0 | {TimeZone=UTC}
 
3. 用户级配置
alter role rolname set timezone='UTC';
或者
alter role all set timezone='UTC';
 
pipeline=# select * from pg_db_role_setting ;
 setdatabase | setrole |              setconfig               
-------------+---------+--------------------------------------
       14930 |       0 | {TimeZone=UTC}
           0 |       0 | {TimeZone=UTC}

 查看时间和时区

--查看pg的时区与时间

postgres=# select now();

now

-------------------------------

2015-11-18 17:42:28.755732-08

(1 row)

--查看时区

postgres=# show time zone;

TimeZone

------------

US/Pacific

 处理空闲idle进程,参数单位为毫秒,可以设置为30000  ---》30秒

[postgres@cdppgdev data]$ cat postgresql.conf |grep idle_in_transaction_session_timeout
#idle_in_transaction_session_timeout = 0    # in milliseconds, 0 is disabled

 

其他

posted on 2019-10-09 18:13  dawn-liu  阅读(414)  评论(0编辑  收藏  举报