PostgreSQL基础篇
yum安装PostgreSQL
yum install -y epel-release
yum install -y postgresql-server postgresql-contrib
postgresql-setup initdb
systemctl start postgresql
systemctl enable postgresql
psql
systemctl status postgresql
su - postgres
[postgres@cdesk_node_2 ~]$ psql
psql (PostgreSQL) 9.2.24
PostgreSQL基本设置
[postgres@cdesk_node_2 ~]$ psql
psql (9.2.24)
Type "help" for help.
postgres=
[postgres@cdesk_node_2 ~]$ vim /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
host all all 127.0.0.1/32 ident
host all all 0.0.0.0/0 md5
- 重启PostgreSQL服务,并远程连接PostgreSQL数据库
[root@cdesk_node_2 ~]
[root@cdesk_node_2 ~]
Password for user postgres:
psql (9.2.24)
Type "help" for help.
postgres=
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)
#创建用户时指定SUPERUSER选项。这将使得该用户拥有所有权限,包括管理数据库和用户的权限
CREATE USER ucds WITH PASSWORD 'd@a88SZVCn72' SUPERUSER;
postgres=# CREATE DATABASE ucds;
#链接到ucds库中
postgres=# \c ucds;
Password for user ucds:
You are now connected to database "ucds" as user "ucds".
ucds=# CREATE SCHEMA ccnp; #创建ccnp schema
ucds=# set search_path TO ccnp; #设置搜索schema路径
SET
ucds=# CREATE TABLE test (
ucds(# id SERIAL PRIMARY KEY,
ucds(# name VARCHAR(255)
ucds(# ); #创建test表
NOTICE: CREATE TABLE will create implicit sequence "test_id_seq" for serial column "test.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
ucds=# INSERT INTO test (name) VALUES ('John Doe'); #创建
INSERT 0 1
ucds=# select * from test;
id | name
1 | John Doe
(1 row)
[postgres@test ~]$ more test.sql
CREATE TABLE test2 (
id SERIAL PRIMARY KEY,
name VARCHAR(255)
);
INSERT INTO test2 (name) VALUES ('John Doe');
postgres-# \c ucds
ucds=# set search_path TO ccnp;
ucds=# \i test.sql ;
ucds=# select * from test2;
id | name
1 | John Doe
(1 row)
PostgreSQL元命令
ucds=# \?
General
\copyright show PostgreSQL usage and distribution terms
\g [FILE] or ; execute query (and send results to file or |pipe)
\h [NAME] help on syntax of SQL commands, * for all commands
\q quit psql
Query Buffer
\e [FILE] [LINE] edit the query buffer (or file) with external editor
\ef [FUNCNAME [LINE]] edit function definition with external editor
\p show the contents of the query buffer
\r reset (clear) the query buffer
\s [FILE] display history or save it to file
\w FILE write query buffer to file
Input/Output
\copy ... perform SQL COPY with data stream to the client host
\echo [STRING] write string to standard output
\i FILE execute commands from file
\ir FILE as \i, but relative to location of current script
\o [FILE] send all query results to file or |pipe
\qecho [STRING] write string to query output stream (see \o)
Informational
(options: S = show system objects, + = additional detail)
\d[S+] list tables, views, and sequences
\d[S+] NAME describe table, view, sequence, or index
\da[S] [PATTERN] list aggregates
\db[+] [PATTERN] list tablespaces
\dc[S+] [PATTERN] list conversions
\dC[+] [PATTERN] list casts
\dd[S] [PATTERN] show object descriptions not displayed elsewhere
\ddp [PATTERN] list default privileges
\dD[S+] [PATTERN] list domains
\det[+] [PATTERN] list foreign tables
\des[+] [PATTERN] list foreign servers
\deu[+] [PATTERN] list user mappings
\dew[+] [PATTERN] list foreign-data wrappers
\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions
\dF[+] [PATTERN] list text search configurations
\dFd[+] [PATTERN] list text search dictionaries
\dFp[+] [PATTERN] list text search parsers
\dFt[+] [PATTERN] list text search templates
\dg[+] [PATTERN] list roles
\di[S+] [PATTERN] list indexes
\dl list large objects, same as \lo_list
\dL[S+] [PATTERN] list procedural languages
\dn[S+] [PATTERN] list schemas
\do[S] [PATTERN] list operators
\dO[S+] [PATTERN] list collations
\dp [PATTERN] list table, view, and sequence access privileges
\drds [PATRN1 [PATRN2]] list per-database role settings
\ds[S+] [PATTERN] list sequences
\dt[S+] [PATTERN] list tables
\dT[S+] [PATTERN] list data types
\du[+] [PATTERN] list roles
\dv[S+] [PATTERN] list views
\dE[S+] [PATTERN] list foreign tables
\dx[+] [PATTERN] list extensions
\l[+] list all databases
\sf[+] FUNCNAME show a function's definition
\z [PATTERN] same as \dp
Formatting
\a toggle between unaligned and aligned output mode
\C [STRING] set table title, or unset if none
\f [STRING] show or set field separator for unaligned query output
\H toggle HTML output mode (currently off)
\pset NAME [VALUE] set table output option
(NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|
numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})
\t [on|off] show only rows (currently off)
\T [STRING] set HTML <table> tag attributes, or unset if none
\x [on|off|auto] toggle expanded output (currently off)
Connection
\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}
connect to new database (currently "ucds")
\encoding [ENCODING] show or set client encoding
\password [USERNAME] securely change the password for a user
\conninfo display information about current connection
Operating System
\cd [DIR] change the current working directory
\setenv NAME [VALUE] set or unset environment variable
\timing [on|off] toggle timing of commands (currently off)
\! [COMMAND] execute command in shell or start interactive shell
Variables
\prompt [TEXT] NAME prompt user to set internal variable
\set [NAME [VALUE]] set internal variable, or list all if no parameters
\unset NAME unset (delete) internal variable
Large Objects
\lo_export LOBOID FILE
\lo_import FILE [COMMENT]
\lo_list
\lo_unlink LOBOID large object operations
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
postgres=
id | age
----+-----
1 | 50
2 | 18
(2 行记录)
postgres=
边缘风格是 2.
postgres=
+----+-----+
| id | age |
+----+-----+
| 1 | 50 |
| 2 | 18 |
+----+-----+
(2 行记录)
postgres=
边缘风格是 0.
postgres=
id age
-- ---
1 50
2 18
postgres=
hahaha
cat t1.sql
psql -h 127.0.0.1 -p 5432 -U postgres -W cjcdb -f t1.sql
备份/还原、导出/导入
- 备份/还原
- 备份共有四种方式,Custom、Tar、Directory以及Plain,使用--format参数进行区分。还原时不需要指定该参数,工具会自行判断。对于Direcotry方式,备份出来是一个文件夹,还原时路径也是指定到该文件夹。对于Plain方式,备份出来是一个SQL文件,不能使用还原工具(pg_restore)进行恢复,但是可以用psql命令进行。
- 表:对于表,使用 --table 参数即是备份指定表,例如:--table "public.tab" ,public为模式名,tab为表名。
- 模式:对于模式,使用 --schema 参数即是备份指定模式,例如:--schema "public"
- 数据库:对于数据库,不加 --table 或 --schema 参数,即是备份整个数据库。
如下所示,为表的备份和还原
--format=c
--format=t
--format=p
--format=d
pg_dump --file "/tmp/tab.backup" --host "localhost" --port "5432" --username "postgres" --verbose --format=c --blobs --table "public.tab" "postgres"
pg_restore --host "localhost" --port "5432" --username "postgres" --dbname "postgres" --verbose --schema "public" --table "tab" "/tmp/tab.backup"
psql --host "localhost" --port "5432" --username "postgres" --dbname "postgres" --file "/tmp/tab.backup"
- 导出/导入
- 导出/导入只针对表(数据),都使用psql命令进行操作。导出与导入命令格式基本一致,区别仅在于导出使用"copy to",而导入使用"copy from"。默认导出格式为text,若要导出CSV格式,则需要加上CSV相关参数,如下所示。
psql --port 5432 --username postgres --dbname postgres --command "\copy public.tab (id, name) TO '/tmp/tab.text';"
# 导入text格式
psql --port 5432 --username postgres --dbname postgres --command "\copy public.tab (id, name) FROM '/tmp/tab.text';"
# 导出CSV格式
psql --port 5432 --username postgres --dbname postgres --command "\copy public.tab (id, name) TO '/tmp/tab.csv' CSV QUOTE '\"' ESCAPE '\"';"
# 导入CSV格式
psql --port 5432 --username postgres --dbname postgres --command "\copy public.tab (id, name) FROM '/tmp/tab.csv' CSV QUOTE '\"' ESCAPE '\"';"