一、访问数据库
本篇文章主要记录GreenPlum数据库的登录和基本的帮助手册相关信息,GreenPlum数据库提供psql客户端程序访问数据库,下面是psql的帮助信息。
1 |
[gpadmin@gpmaster ~]$ psql --help |
常用的有以下几个参数:
-d,指定要连接的数据库,基本每次登录GreenPlum数据库都需要使用这个参数。
-l,列出可用的所有数据库,如果忘记了要登录数据库的名字,可以使用这个参数查看。
-h,指定要连接的数据库服务器的IP地址,默认是本机(localhost)。
-p,指定数据库的端口号,默认是5432.
-U,连接数据库的用户名,默认是gpadmin。
下面演示下如何登录GreenPlum数据库,首先使用psql –l参数列出都有哪些数据库。
1 2 3 4 5 6 7 8 9 10 11 |
[gpadmin@gpmaster ~]$ psql -l List of databases Name | Owner | Encoding | Access privileges -----------+---------+----------+--------------------- gptest | gpadmin | UTF8 | postgres | gpadmin | UTF8 | template0 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin template1 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin (4 rows) |
可以看到当前有4个数据库,下面演示在本地登录postgres数据库,登录本地数据库可以不指定-h参数,如果端口使用默认的5432,也不需要指定-p参数,默认使用gpadmin管理员用户登录数据库,如果使用gpadmin用户登录,也可以不指定-U参数。
1 2 3 4 5 6 7 8 9 10 11 12 |
[gpadmin@gpmaster ~]$ psql -d postgres psql (8.2.15) Type "help" for help. postgres=# help You are using psql, the command-line interface 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=# \q |
下面在本地通过远程的方式登录数据库。
1 2 3 4 5 |
[gpadmin@gpmaster ~]$ psql -h gpmaster -p 5432 -U gpadmin -d postgres psql (8.2.15) Type "help" for help. postgres=# |
二、设置访问权限
下面测试Segment节点远程访问数据库。
1 2 |
[gpadmin@gpsegment01 ~]$ psql -h gpmaster -p 5432 -U gpadmin -d postgres psql: FATAL: no pg_hba.conf entry for host "10.10.0.188", user "gpadmin", database "postgres", SSL off |
这是因为没有开启segment节点的访问权限,如果需要远程访问数据库,还需要为用户设置密码,登录Master节点,为gpadmin用户设置密码。
1 2 |
postgres=# alter role gpadmin with password 'gpadmin'; ALTER ROLE |
然后在pg_hba.conf文件中,增加gpsegment01节点的权限,使gpsegment01节点可以访问数据库。(/data/greenplum/master/gpseg-1/pg_hba.conf)
增加以下内容:
1 |
host all gpadmin 10.10.0.188/32 trust |
修改pg_hba.conf文件不需要重启数据库,但是需要使用gpstop –u参数重新加载后才能使之生效。
1 2 3 4 5 6 7 |
[gpadmin@gpmaster gpseg-1]$ gpstop -u 20170512:03:33:02:000865 gpstop:gpmaster:gpadmin-[INFO]:-Starting gpstop with args: -u 20170512:03:33:02:000865 gpstop:gpmaster:gpadmin-[INFO]:-Gathering information and validating the environment... 20170512:03:33:02:000865 gpstop:gpmaster:gpadmin-[INFO]:-Obtaining Greenplum Master catalog information 20170512:03:33:02:000865 gpstop:gpmaster:gpadmin-[INFO]:-Obtaining Segment details from master... 20170512:03:33:02:000865 gpstop:gpmaster:gpadmin-[INFO]:-Greenplum Version: 'postgres (Greenplum Database) 4.3.11.1 build commit: 9fad76371cc5554375f0c32ae46571eccf41c75b' 20170512:03:33:02:000865 gpstop:gpmaster:gpadmin-[INFO]:-Signalling all postmaster processes to reload |
然后segment01节点就可以远程访问数据库了。
1 2 3 4 5 |
[gpadmin@gpsegment01 ~]$ psql -h gpmaster -p 5432 -U gpadmin -d postgres psql (8.2.15) Type "help" for help. postgres=# |
GreenPlum数据库的密码是区分大小写的,在设置密码和输入密码时需要注意。
三、简单使用帮助
登录数据库后,该怎么使用呢?GreenPlum数据库提供了较详细的帮助手册,不知道怎么看帮助手册不要紧,help命令基本是通用的,直接输入help命令,就可以看到如何查看帮助手册了。
1 2 3 4 5 6 7 |
postgres=# help You are using psql, the command-line interface 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 |
\h,SQL相关的手册。
\?,psql客户端的常用命令手册。
\q,退出数据库。
先看下\h帮助信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
postgres=# \h Available help: ABORT COPY DROP CAST LISTEN ALTER AGGREGATE CREATE AGGREGATE DROP CONVERSION LOAD ALTER CONVERSION CREATE CAST DROP DATABASE LOCK ALTER DATABASE CREATE CONSTRAINT TRIGGER DROP DOMAIN MOVE ALTER DOMAIN CREATE CONVERSION DROP EXTERNAL TABLE NOTIFY ALTER EXTERNAL TABLE CREATE DATABASE DROP FILESPACE PREPARE ALTER FILESPACE CREATE DOMAIN DROP FOREIGN DATA WRAPPER PREPARE TRANSACTION ALTER FOREIGN DATA WRAPPER CREATE EXTERNAL TABLE DROP FUNCTION REASSIGN OWNED ALTER FUNCTION CREATE FOREIGN DATA WRAPPER DROP GROUP REINDEX ALTER GROUP CREATE FUNCTION DROP INDEX RELEASE SAVEPOINT ALTER INDEX CREATE GROUP DROP LANGUAGE RESET ALTER LANGUAGE CREATE INDEX DROP OPERATOR REVOKE ALTER OPERATOR CREATE LANGUAGE DROP OPERATOR CLASS ROLLBACK ALTER OPERATOR CLASS CREATE OPERATOR DROP OWNED ROLLBACK PREPARED ALTER RESOURCE QUEUE CREATE OPERATOR CLASS DROP RESOURCE QUEUE ROLLBACK TO SAVEPOINT ALTER ROLE CREATE RESOURCE QUEUE DROP ROLE SAVEPOINT ALTER SCHEMA CREATE ROLE DROP RULE SELECT ALTER SEQUENCE CREATE RULE DROP SCHEMA SELECT INTO ALTER SERVER CREATE SCHEMA DROP SEQUENCE SET ALTER TABLE CREATE SEQUENCE DROP SERVER SET CONSTRAINTS ALTER TABLESPACE CREATE SERVER DROP TABLE SET ROLE ALTER TRIGGER CREATE TABLE DROP TABLESPACE SET SESSION AUTHORIZATION ALTER TYPE CREATE TABLE AS DROP TRIGGER SET TRANSACTION ALTER USER CREATE TABLESPACE DROP TYPE SHOW ALTER USER MAPPING CREATE TRIGGER DROP USER START TRANSACTION ANALYZE CREATE TYPE DROP USER MAPPING TRUNCATE BEGIN CREATE USER DROP VIEW UNLISTEN CHECKPOINT CREATE USER MAPPING END UPDATE CLOSE CREATE VIEW EXECUTE VACUUM CLUSTER DEALLOCATE EXPLAIN VALUES COMMENT DECLARE FETCH COMMIT DELETE GRANT COMMIT PREPARED DROP AGGREGATE INSERT |
\h命令会列出大部分的命令,\h命令后面输入以上命令信息即可看到详细的帮助信息,以CREATE DATABASE为例。
1 2 3 4 5 6 7 8 9 10 |
postgres-# \h CREATE DATABASE Command: CREATE DATABASE Description: create a new database Syntax: CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ] |
\?命令输出的结果太多,这里就不列举了,介绍几个个常用的psql客户端命令。
\l,列出所有数据库信息。
1 2 3 4 5 6 7 8 9 10 11 |
postgres-# \l List of databases Name | Owner | Encoding | Access privileges -----------+---------+----------+--------------------- gptest | gpadmin | UTF8 | postgres | gpadmin | UTF8 | template0 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin template1 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin (4 rows) |
\c,切换用户、数据库。
1 2 3 |
postgres-# \c template1 You are now connected to database "template1" as user "gpadmin". template1-# |
\conninfo,列出数据库的连接信息。
1 2 |
template1-# \conninfo You are connected to database "template1" as user "gpadmin" on host "gpmaster" at port "5432". |
\d,列出当前数据库所有的表,如果后面加表名,则列出表的字段及索引信息。
1 2 |
template1-# \d No relations found. |
这是因为postgres数据库没有表,所以\d命令没有结果,创建一张表后,即可列出当前数据库的所有表信息。
1 2 |
template1=# create table tt (id int,name varchar(10)) DISTRIBUTED BY(ID); CREATE TABLE |
以上建表语句是创建一张基于ID字段hash分布的表,GreenPlum是分布式存储的数据库,表会创建到所有Segment节点上。
1 2 3 4 5 6 |
template1=# \d List of relations Schema | Name | Type | Owner | Storage --------+------+-------+---------+--------- public | tt | table | gpadmin | heap (1 row) |
下面看下pg_database数据字典信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
template1=# \d pg_database Table "pg_catalog.pg_database" Column | Type | Modifiers ---------------+-----------+----------- datname | name | not null datdba | oid | not null encoding | integer | not null datistemplate | boolean | not null datallowconn | boolean | not null datconnlimit | integer | not null datlastsysoid | oid | not null datfrozenxid | xid | not null dattablespace | oid | not null datconfig | text[] | datacl | aclitem[] | Indexes: "pg_database_datname_index" UNIQUE, btree (datname), tablespace "pg_global" "pg_database_oid_index" UNIQUE, btree (oid), tablespace "pg_global" Triggers: pg_sync_pg_database AFTER INSERT OR DELETE OR UPDATE ON pg_database FOR EACH STATEMENT EXECUTE PROCEDURE flatfile_update_trigger() Tablespace: "pg_global" |
\d命令不但可以列出表的列信息,还可以列出索引、触发器和表空间信息。