加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Debian 平台下 Postgresql 数据库基本操作说明

发布时间:2020-12-13 17:22:05 所属栏目:百科 来源:网络整理
导读:1 安装postgresql -- 使用apt 直接安装: dave@dave:~/cndba$ sudo apt-get installpostgresql postgresql-client postgresql-server-dev-all -y -- 查看数据库状态: postgres@dave:~$ /etc/init.d/postgresql status Running clusters: 9.1/main -- 停止:



1 安装postgresql

--使用apt 直接安装:

dave@dave:~/cndba$ sudo apt-get installpostgresql postgresql-client postgresql-server-dev-all -y

--查看数据库状态:

postgres@dave:~$ /etc/init.d/postgresql status

Running clusters: 9.1/main

--停止:

postgres@dave:~$ /etc/init.d/postgresql stop

[ ok ] Stopping PostgreSQL 9.1 databaseserver: main.

--启动:

postgres@dave:~$ /etc/init.d/postgresql start

[ ok ] Starting PostgreSQL 9.1 databaseserver: main.

postgres@dave:~$

--查看进程:

postgres@dave:~$ ps -ef|grep postgres

root9502 9184 0 06:34 pts/2 00:00:00 su - postgres

postgres9510 9502 0 06:34 pts/2 00:00:00 -su

postgres9869 1 0 06:52 ? 00:00:00/usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -cconfig_file=/etc/postgresql/9.1/main/postgresql.conf

postgres9871 9869 0 06:52 ? 00:00:00 postgres: writer process

postgres9872 9869 0 06:52 ? 00:00:00 postgres: wal writer process

postgres9873 9869 0 06:52 ? 00:00:00 postgres: autovacuum launcherprocess

postgres9874 9869 0 06:52 ? 00:00:00 postgres: stats collectorprocess

postgres9905 9510 0 06:53 pts/2 00:00:00 ps -ef

postgres9906 9510 0 06:53 pts/2 00:00:00 grep postgres

postgres@dave:~$

--设置开机自启动:

postgres@dave:~$ sudo update-rc.d postgresql start 88 2 3 4 5 . stop 88 0 1 6 .

update-rc.d: using dependency based bootsequencing

postgres@dave:~$

第一次安装后,默认生成一个名为postgres的数据库和一个名为postgres的数据库用户。同时还生成了一个名为postgres的Linux系统用户。

--修改postgres 用户密码:

dave@dave:~$ sudo passwd postgres

Enter new UNIX password:

Retype new UNIX password:

passwd: password updated successfully

dave@dave:~$

2 查看数据库信息

--查看数据库信息:

dave@dave:~$ su - postgres

Password:

postgres@dave:~$ psql

psql (9.1.15)

Type "help" for help.

postgres=# help

You are using psql,the command-lineinterface to PostgreSQL.

Type:copyright for distribution terms

h for help with SQL commands

? for help with psql commands

g or terminate with semicolon to execute query

q to quit

postgres=#

postgres-# l

List of databases

Name |Owner | Encoding | Collate| Ctype |Access privileges

-----------+----------+----------+-------------+-------------+-----------------------

postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |

template0 | postgres | UTF8 |en_US.UTF-8 | en_US.UTF-8 | =c/postgres+

| | | | | postgres=CTc/postgres

template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |=c/postgres +

| | || |postgres=CTc/postgres

(3 rows)

postgres-#

--连接到某个数据库:

postgres-# c postgres

You are now connected to database"postgres" as user "postgres".

postgres-# c template1

You are now connected to database"template1" as user "postgres".

template1-#

postgres=# c postgres

You are now connected to database"postgres" as user "postgres".

--显示当前的数据库:

postgres=# select current_database();

current_database

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

postgres

(1 row)

--该命令显示当前的userid

postgres=# select current_user; 

current_user

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

postgres

(1 row)

--退出操作界面:

template1-# q

postgres@dave:~$

3 创建DB对象

默认的postgres用户是超级管理员,权限太大,所以一般建议创建一个独立的管理用户。

dave@dave:~$ su - postgres

Password:

postgres@dave:~$ psql

psql (9.1.15)

Type "help" for help.

--创建数据库用户、数据库,并赋予新用户新数据库的全部权限:

postgres=# create user dave with password'dave';

CREATE ROLE

postgres=# create database cndba;

CREATE DATABASE

postgres=# grant all privileges on databasecndba to dave;

GRANT

postgres=#

postgres=# l

List of databases

Name |Owner | Encoding | Collate| Ctype |Access privileges

-----------+----------+----------+-------------+-------------+-----------------------

cndba | postgres | UTF8 |en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres+

| | | | | postgres=CTc/postgres+

| | | | | dave=CTc/postgres

postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |

template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |=c/postgres +

| | | | | postgres=CTc/postgres

template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |=c/postgres +

| | | | | postgres=CTc/postgres

(4 rows)

--重置postgres账户密码:

postgres=# alter user postgres withpassword 'dave';

ALTER ROLE

--修改用户认证配置文件pg_hba.conf

postgres@dave:/etc/postgresql/9.1/main$ pwd

/etc/postgresql/9.1/main

postgres@dave:/etc/postgresql/9.1/main$ ls

environmentpg_ctl.conf pg_hba.conf pg_ident.confpostgresql.conf start.conf

# Database administrative login by Unixdomain socket

localall postgres trust

# TYPEDATABASE USER ADDRESS METHOD

# "local" is for Unix domainsocket connections only

localall all md5

--重新加载postgresql

postgres@dave:/etc/postgresql/9.1/main$/etc/init.d/postgresql reload

postgres@dave:~$ psql -d cndba -U dave

Password for user dave:

psql (9.1.15)

Type "help" for help.

cndba=> selectcurrent_user;

current_user

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

dave

(1 row)

--表的基本操作:

postgres-> c cndba

You are now connected to database"cndba" as user "dave".

cndba->

cndba=> create table cndba(namevarchar(20),signupdate date);

CREATE TABLE

cndba=> insert into cndba(name,signupdate)values('dave','2015-02-11');

INSERT 0 1

cndba=> select * from cndba;

name| signupdate

------+------------

dave| 2015-02-11

(1 row)

cndba=> update cndba set name ='tianlesoftware' where name = 'dave';

UPDATE 1

cndba=> alter table cndba add emailvarchar(40);

ALTER TABLE

cndba=> alter table cndba alter columnsignupdate set not null;

ALTER TABLE

cndba=> alter table cndba rename columnsignupdate to signup;

ALTER TABLE

cndba=> alter table cndba drop columnemail;

ALTER TABLE

cndba=> alter table cndba rename todave;

ALTER TABLE

cndba=> drop table if exists dave;

DROP TABLE

cndba=>

4 postgresql 查看数据库,表,索引,表空间以及大小

postgres=# select pg_database.datname,pg_database_size(pg_database.datname) AS size from pg_database;

datname | size

-----------+---------

template1 | 6030136

template0 | 6030136

postgres| 6030136

cndba| 6038328

(4 rows)

--以KB,MB,GB的方式来查看数据库大小

postgres=# selectpg_size_pretty(pg_database_size('cndba'));

pg_size_pretty

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

5897kB

(1 row)

postgres=# create table cndba(namevarchar(20),signupdate date);

CREATE TABLE

--查看多表:

postgres=# dt

List of relations

Schema | Name| Type | Owner

--------+-------+-------+----------

public | cndba | table | postgres

(1 row)

--查看单表:

postgres=# d cndba

Table "public.cndba"

Column | Type | Modifiers

------------+-----------------------+-----------

name| character varying(20) |

signupdate | date |

--查看表大小

postgres=#select pg_relation_size('cndba');

pg_relation_size

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

8192

(1 row)

--以KB,MB,GB的方式来查看表大小

postgres=# selectpg_size_pretty(pg_relation_size('cndba'));

pg_size_pretty

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

8192bytes

(1 row)

--查看索引信息:

postgres=# create index idx_cndba oncndba(name);

CREATE INDEX

postgres=# di

List of relations

Schema |Name | Type |Owner | Table

--------+-----------+-------+----------+-------

public | idx_cndba | index | postgres | cndba

(1 row)

--查看索引大小:

postgres=#select pg_size_pretty(pg_relation_size('idx_cndba'));

pg_size_pretty

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

16kB

(1 row)

--看表的总大小,包括索引大小

postgres=# selectpg_size_pretty(pg_total_relation_size('cndba'));

pg_size_pretty

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

24kB

(1 row)

--查看所有表空间:

postgres=# select spcname frompg_tablespace;

spcname

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

pg_default

pg_global

(2 rows)

--查看表空间大小:

postgres=# selectpg_size_pretty(pg_tablespace_size('pg_default'));

pg_size_pretty

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

23MB

(1 row)

5 PostgreSQL用户认证

PostgreSQL的配置文件在/etc/postgresql目录下:

dave@dave:/etc/postgresql/9.1/main$ pwd

/etc/postgresql/9.1/main

dave@dave:/etc/postgresql/9.1/main$ ls

environmentpg_ctl.conf pg_hba.conf pg_ident.confpostgresql.conf start.conf

postgresql.conf 文件里保存的是数据库的相关的配置。

# - Connection Settings -

listen_addresses = '*' # what IP address(es) to listen on;

#comma-separated list of addresses;

#defaults to 'localhost','*' = all

#(change requires restart)

port = 5432 # (change requiresrestart)

max_connections = 100 # (change requires restart)

# Note:Increasing max_connections costs ~400 bytes of shared memory per

# connection slot,plus lock space (seemax_locks_per_transaction).

#superuser_reserved_connections = 3 # (change requires restart)

unix_socket_directory ='/var/run/postgresql' # (changerequires restart)

#unix_socket_group = '' # (change requires restart)

#unix_socket_permissions = 0777 # begin with 0 to use octal notation

#(change requires restart)

#bonjour = off # advertise servervia Bonjour

#(change requires restart)

#bonjour_name = '' # defaults to thecomputer name

#(change requires restart)

注意这里的端口信息,要添加的防火墙的策略里。

pg_hba.conf中保存基于主机的认证规则。每条规则会被逐条应用,直到找到一条符合的,就能通过认证;或者访问被reject方法显式拒绝。

postgres@dave:/etc/postgresql/9.1/main$ catpg_hba.conf |grep -v ^# |grep -v ^$

localall postgres trust

localall all md5

hostall all 127.0.0.1/32 md5

hostall all ::1/128 md5

带注释的如下:

# Database administrative login by Unixdomain socket

localall postgres trust

# TYPEDATABASE USER ADDRESS METHOD

# "local" is for Unix domainsocket connections only

localall all md5

# IPv4 local connections:

hostall all 127.0.0.1/32 md5

Type = host表示远程连接。

Database = all 表示所有数据库。

User = all 表示所有用户。

ADDRESS 由两部分组成,即IP地址/子网掩码。子网掩码规定了IP地址中前面哪些位表示网络编号。这里/0表示IP地址中没有表示网络编号的位,这样的话全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。

Method = trust 实际上表示无需认证。

--允许在本机上的任何身份连接任何数据库

TYPE DATABASE USERIP-ADDRESS IP-MASK METHOD

local all all trust(无条件进行连接)

--允许IP地址为192.168.1.x的任何主机与数据库sales连接

TYPE DATABASE USERIP-ADDRESS IP-MASK METHOD

host sales all192.168.1.0 255.255.255.0 identsameuser

6 远程访问数据库

postgresql默认情况下,远程访问不能成功,如果需要允许远程访问,需要修改两个配置文件,说明如下:

(1)postgresql.conf

将该文件中的listen_addresses项值设定为*。

(2)pg_hba.conf

在该配置文件的host allall 127.0.0.1/32 md5行下添加以下配置,或者直接将这一行修改为以下配置

hostall all 0.0.0.0/0 md5

表示允许所有IP访问。

修改之后,Reload 或者重启数据库让修改生效:

postgres@dave:/etc/postgresql/9.1/main$/etc/init.d/postgresql reload

直接使用Navicat 链接:




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

版权所有,文章禁止转载,否则追究法律责任!

AboutDave:

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

QQ: 251097186

Email: tianlesoftware@gmail.com

Blog: http://blog.csdn.net/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

Dave 的QQ群:

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

注意:加群必须注明表空间和数据文件关系 | 不要重复加群

CNDBA_1: 62697850 (空) CNDBA_2: 62697716 (满)CNDBA_3: 283816689

CNDBA_4: 391125754 CNDBA_5:104207940 CNDBA_6: 62697977 CNDBA_7: 142216823(满)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读