postgresql
文章平均质量分 80
丹心明月
路上,期待不一样的精彩。
展开
-
PostgreSQL体系结构
PostgreSQL数据库是由一系列位于文件系统上的物理文件组成,在数据库运行过程中,通过整套高效严谨的逻辑管理这些物理文件。通常将这些物理文件称为数据库,将管理这些物理文件的进程、进程管理的内存称为这个数据库的实例。在PostgreSQL的内部功能实现上,可以分为系统控制器、查询分析器、事务系统、恢复系统、文件系统这几部分。其中系统控制器负责接收外部连接请求,查询分析器对连接请求查询进行分...原创 2019-04-15 18:52:05 · 633 阅读 · 0 评论 -
PostgreSQL学习第十六篇 异步流复制Hot Standby的示例
配置环境:主机名IP地址角色数据目录pg186.168.100.14主库/PostgreSQL/9.6.1/datanpghs186.168.100.24standby/PostgreSQL/9.6.1/datahs主数据库的配置:允许主库接受流复制的连接pg_hba.conf中:host replication postgres 186原创 2017-02-09 16:03:32 · 973 阅读 · 0 评论 -
PostgreSQL学习第十二篇 服务的启停和创建
启动一个数据库实例有两种方法: 1. 直接运行postgres进程启动 postgres -D /home/xxxxx & 2. 使用pg_ctl命令启动 pg_ctl -D /xxx start停止数据库也有两种方法: 1. 直接向运行postgres主程序发送signal信号,停止数据库 2. 使用pg_ctl停止数据库的模式有三种: 1. smart sh原创 2017-01-17 17:06:31 · 1599 阅读 · 0 评论 -
PostgreSQL学习第十一篇 进程及内存结构
PostgreSQL数据库启动时,会先启动一个叫Postmaster的主进程,还会fork出一些辅助子进程。SysLogger(系统日志)进程BgWriter(后台写)进程WaLWriter(预写式日志)进程PgArch(归档)进程AutoVAcuum(系统自动清理)进程PgStat(统计数据收集)进程PostgresSQL数据库的主要功能都集中于postgres程序,这个程序位原创 2017-01-17 16:17:50 · 1782 阅读 · 0 评论 -
PostgreSQL学习篇15.1 数据库配置优化
内存配置优化:PG中与内存有关的配置参数:shared_buffers:共享缓存区的大小,相当于Oracle中的SGA,推荐为内存的1/4,不超过总内存的1/2。从PG9.3开始,共享内存已从System V方式改为了Posix方式和mmap方式,因此在pg9.3以后不需要配置Linux的shmmax和shmall参数,之前的版本还需要配置。shmmax:表示单个共享内存段可以创建的最大值,s原创 2017-02-08 09:40:04 · 1910 阅读 · 0 评论 -
PostgreSQL学习第十五篇 性能监控
数据库性能视图以pg_stat开头。是否产生这些统计数据,由一下参数决定:track_counts:是否收集表和索引上的统计信息,默认为ontrack_functions:可以取all、pl和all,如果是pl则只收集pl/pgsql写的函数的统计信息;all表示收集所有类型的函数,包括C语言和SQL写的函数。默认为nonetrack_activities:是否收集当前正在执行的SQL,默原创 2017-02-07 14:46:47 · 9179 阅读 · 0 评论 -
PostgreSQL学习篇10.2 表
以其他表创建新表:postgres=# create table old(id int,id2 int,col1 int,constraint pk_old primary key(id,id2));CREATE TABLEpostgres=# create table new (like old);CREATE TABLEpostgres=# \d old Table "p原创 2017-01-16 10:01:41 · 1241 阅读 · 0 评论 -
PostgreSQL学习篇14.1 SQL/MED
SQL/MED是sql语言中管理外部数据的一个扩展标准。MED:management of external data。它通过定义一个外部数据包装器和数据连接类型来管理外部数据。9.1开始提供对SQL/MED的支持,通过SQL/MED可以连接到各种异构数据库或其他PostgreSQL数据库。其相当于一套连接其他数据源的框架和标准。在SQL/MED标准中,实现了一下四类数据库对象来访问外部数据源:原创 2017-02-06 17:20:47 · 1337 阅读 · 1 评论 -
PostgreSQL学习第十四篇 listen与notify
PostgreSQL提供了client端之间通过服务器端进行消息通信的机制。这种机制是通过listen和notify命令来完成的。session1:postgres=# listen postgres;LISTENpostgres=# listen limingpostgres-# ;LISTENsession2:postgres=# notify postgres,'hell原创 2017-02-06 14:29:18 · 2331 阅读 · 1 评论 -
PostgreSQL学习篇10.1 模式
模式(schema)是数据库中的一个概念,可以将其理解为一个命名空间或目录。在PG中,一个数据库包含一个或者多个模式,模式中又包含了表、函数及操作符等数据库对象。在PG中,不能同时访问不同数据库中的对象,当要访问另一个数据库中的表或其他对象时,需要重新连接到这个新的数据库,而模式没有此限制。模式创建:create schema sch_name [authorization user_n原创 2017-01-10 15:12:58 · 2191 阅读 · 0 评论 -
PostgreSQL学习篇13.1 统计信息的收集
PgStat子进程是PostgreSQL中专门的统计信息收集器进程。表和索引的行数、块数等统计信息记录在系统表pg_class中,其他的统计信息主要收集在系统表pg_statistic中。统计信息收集器的配置项:#------------------------------------------------------------------------------# RUNTIME原创 2017-02-05 13:39:06 · 5693 阅读 · 2 评论 -
PostgreSQL学习第十三篇 执行计划
PostgreSQL中explain的语法:explain [option] statementexplain [analyze] [verboase] statement命令的可选选项option为:analyzeverbosecostsbuffersformat(text|xml|json|yaml)analyze选项通过实际执行的sql来获得相应的执行计划。(实际执行)原创 2017-02-05 10:44:05 · 2583 阅读 · 1 评论 -
PostgreSQL学习第十篇 数据库逻辑结构介绍--数据库
PG中,数据的组织结构可以分为以下三层: 1. 数据库:一个PostgreSQL数据库服务下可以管理多个数据库; 2. 表、索引:注:一般的PG中,表的术语叫relation,而其他数据库中为table 3. 数据行:注:PG中行的术语一般为tuple,而在其他数据库中则为row在PostgreSQL中,一个数据库服务(或者叫实例)下可以有多个数据库,而一个数据库不能属于多个实例。然而原创 2017-01-09 12:16:14 · 2676 阅读 · 0 评论 -
PostgreSQL学习篇9.17 数组类型
数组类型声明:create table testsz(id int,col1 int[]);输入数组值:postgres=# create table testsz(id int,col1 int[]);CREATE TABLEpostgres=# insert into testsz values(1,'{1,2,3}');INSERT 0 1postgres=# insert原创 2017-01-06 14:00:22 · 791 阅读 · 0 评论 -
PostgreSQL学习第五篇--监听地址及端口修改
在数据目录下编辑postgresql.conf文件,找到如下内容:#listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses;原创 2016-11-23 21:50:02 · 22936 阅读 · 2 评论 -
PostgreSQL学习篇16.2 同步流复制的standby数据库
从9.1后,提供了同步流复制的架构。同步复制要求在数据写入standby数据库后,事务的commit才返回,所以standby库出现问题时,会导致主库hang住。可以启动两个standby数据库,只要有一个是正常的,主库就不会hang住。但是因为资源限制,这里只配置一个standby库。环境:主机名IP地址角色数据目录pg186.168.100.14主库/PostgreSQL/原创 2017-02-10 22:03:38 · 1221 阅读 · 0 评论 -
postgresql与Oracle:空字符串与null
空字符串:两个单引号,中间无空格等任何内容在postgresql中,空字符串与null是不同的;而oracle中,空字符串与null等同。测试如下:postgresql中:postgres=# insert into testnull values(1,'feikong');INSERT 0 1postgres=# insert into testnull values(2,null原创 2017-06-20 16:00:30 · 8163 阅读 · 0 评论 -
postgresql的now()与Oracle的sysdate
postgresql的now()为当前事务开始时间,而Oracle的sysdate是当前时间。区别在于事务。postgresql中的now():postgres=# begin ;BEGINpostgres=# select now(); now ------------------------------- 2017-03-原创 2017-06-20 11:38:32 · 5064 阅读 · 0 评论 -
pg_buffercache
查看缓冲区缓存的内容:create extension pg_buffercache;select c.relname, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d on (b.reldatabase=d.oi原创 2017-05-05 15:40:28 · 1084 阅读 · 0 评论 -
pg limit限制返回的行
limit 20:返回结果集中的前20行offset 20 limit 20:返回结果集中前40行中的后20行示例:创建测试表:postgres=# create table test_limit(id int,name text);CREATE TABLE插入数据:postgres=# insert into test_limitselect generate_series(1原创 2017-03-31 17:10:22 · 5804 阅读 · 0 评论 -
pg审计DDL
首先确认log_statement设置为了ddl或者mod或者all修改参数需要重新加载配置文件。在日志文件中查找所有出现的create、alter和drop命令:egrep -i "create|alter|drop" /log_dir如果开启了日志轮换,那么还需要在所有的日志文件中过滤这些内容。(是pg_log中的日志文件)测试:修改参数文件:[postgres@pg d原创 2017-03-13 09:55:08 · 1019 阅读 · 0 评论 -
pg确定一张表最后被使用的时间
create or replace function table_file_access_info(IN schemaname text,IN tablename text,OUT last_access timestamp with time zone,OUT last_change timestamp with time zone) LANGUAGE plpgsql AS $func$DECL原创 2017-03-28 09:34:53 · 1737 阅读 · 0 评论 -
将数据从CSV文件导入PG数据库
csv文件内容:[postgres@pg ~]$ vi PGOracle.csv 1,2,34,5,67,8,9创建了新表:postgres=# create table testim(col1 text,col2 text,col3 text);CREATE TABLE从文件导入数据:postgres=# copy testim from '/home/postgres原创 2017-03-09 16:18:02 · 10831 阅读 · 0 评论 -
PG索引创建与Oracle的不同
刚发现个有趣的地方,pg可以给同一表的相同列创建相同索引N次!太疯狂了!postgres=# create table testind(id int);CREATE TABLEpostgres=# create index on testind (id);CREATE INDEXpostgres=# create index on testind (id);CREATE IN原创 2017-03-09 14:49:05 · 1828 阅读 · 0 评论 -
PostgreSQL学习第四篇--数据库cluster启停
启动数据库:pg_ctl start -D $PGDATA关闭数据库:pg_ctl stop -D $PGDATA [-m mode]mode有三种模式: 1. smart :等待所有的连接终止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。看起来是Oracle的normal。 2. fast:快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库,看起来原创 2016-11-23 18:58:01 · 2614 阅读 · 2 评论 -
PG表名测试
postgres=# create table "myTable" (id int);CREATE TABLEpostgres=# select * from mytablepostgres-# ;ERROR: relation "mytable" does not existLINE 1: select * from mytable ^p原创 2017-03-08 13:49:45 · 1175 阅读 · 2 评论 -
psql: FATAL: the database system is starting up
pg9.6.1在搭建同步流复制的standby库时,启动备库时,报错:[postgres@pghs ~]$ psqlpsql: FATAL: the database system is starting up后经检查,是postgresql.conf中hot_standby没有设置:hot_standby = on成功: [postgres@pghs ~]$ psqlpsq原创 2017-02-10 21:55:15 · 19205 阅读 · 2 评论 -
pg为特定用户组设置参数
为特定用户组设置参数:数据库里面的所有用户:alter database db_name set param=val;为某个用户:alter role role_name set param=val;为特定用户连接到特定数据库:alter role role_name in database db_name set param=val;简单示例:postgres=# alter d原创 2017-03-02 10:50:52 · 878 阅读 · 0 评论 -
PostgreSQL学习篇16.3 检查备库及流复制情况
检查异步流复制情况:主库查询:select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;postgres=# \d pg_stat_replication; View "pg_catalog.pg_stat_replication" Column |原创 2017-02-13 16:36:33 · 3644 阅读 · 0 评论 -
PostgreSQL学习篇9.16 range类型
第一次见。range类型,可以进行范围快速搜索。用于表示范围,而范围底下的基本类型成为range类型的subtype。range类型:int4range:4字节整数的范围类型int8range:8字节整数的范围类型numrange:numeric的范围类型tsrange:无时区的时间戳范围类型tstzrange:有时区的时间戳范围类型datarange:日期的范围类型还可以使原创 2016-12-28 15:44:49 · 2715 阅读 · 1 评论 -
PostgreSQL学习篇9.15 JSON类型
第一次见这种类型。JSON数据类型可以用来存储JSON(JavaScript Object Notation)数据。JSON和JSONB类型。postgres=# select '9'::json,'"osdba"'::json,'true'::json,'TRUE'::json,'null'::json;ERROR: invalid input syntax for type原创 2016-12-28 15:03:19 · 2061 阅读 · 0 评论 -
PostgreSQL学习第七篇--psql常用命令
1)\d :显示数据库中有哪些表\d tab_name :查看表的定义查看索引信息:postgres=# \d txx_pkey Index "public.txx_pkey" Column | Type | Definition--------+---------+------------ id | integer | idprimary key, bt原创 2016-11-27 21:52:15 · 1190 阅读 · 0 评论 -
PostgreSQL学习第六篇--psql常用连接数据库的方法
psql -h -p [dbname] [username]-h 指定要连接数据库所在的主机名或者IP地址-p 指定连接的数据库端口,最后两个参数是数据库名和用户名。示例:[postgres@single ~]$ psql -h 186.168.100.13 -p 5432 testdb postgrespsql: could not connect to server: Conne原创 2016-11-26 22:38:37 · 14913 阅读 · 0 评论 -
PostgreSQL学习篇9.1 布尔类型
boolean的状态要么是true要么是false,如果是unknown,用NULL表示。boolean在SQL中可以用不带引号的TRUE和FALSE表示,也可以用更多的表示真假的带引号的字符表示,如'true','false','yes','no','1','0'等测试:test=# create table t (id int, nan boolean, note text);CREA原创 2016-12-06 15:20:53 · 3630 阅读 · 0 评论 -
PostgreSQL学习第五篇--本机psql设置需要/不需要密码
[postgres@single ~]$ psqlpsql (9.6.1)Type "help" for help.postgres=#无需输入密码,可以修改pg_hba.conf文件来要求输入密码。设置完成后需要重启之后生效。以下为设置不需要密码的情况:[postgres@single pgdata]$ vi pg_hba.conf# "local" is for Unix原创 2016-11-24 02:29:58 · 8344 阅读 · 4 评论 -
PostgreSQL学习第三篇--安装后的配置
为了以后方便,对pg安装路径建立软连接:[root@single bin]# ln -sf /usr/pg/postgresql-9.6.1/ /usr/local/pgsql配置postgres用户的.bash_profilePATH=/usr/local/pgsql/bin:$PATH:$HOME/binexport PATHexport LD_LIBRARY_PATH=/原创 2016-11-23 18:24:00 · 3041 阅读 · 0 评论 -
PostgreSQL学习第二篇--安装
安装方法一般分为两类:一种是从二进制安装包进行安装(系统自带的,一般比较旧)另一种是从源码安装(从官网下载的)源码安装一般步骤:1.从官网下载源代码2.编译安装 ./configure make make install3.编译安装完成后的操作:1)initdb初始化数据库簇2)启动数据库实例3)创建一个应用使用的数据库从源码安装示例:操作原创 2016-11-23 18:09:24 · 3469 阅读 · 0 评论 -
PostgreSQL学习第一篇--官网
PostgreSQL官网:https://www.postgresql.org/此网址的作用:可以下载介质,可以查看关于PostgreSQL的几乎所有内容。我习惯先从安装去熟悉一个软件,所以,官网是必不可少的一步:下载介质。还有官方文档下载。可以说是初学者必备之良师啊!原创 2016-11-22 22:06:20 · 1355 阅读 · 0 评论 -
Oracle DBA的PostgreSQL学习之路
因为公司业务发展的需要,部门安排本人开始进行PostgreSQL的学习,那么从今天开始,我就不仅仅是一名Oracle DBA了,我还是一名行进在PostgreSQL道路上的拾贝者。特此纪念,加油!原创 2016-11-22 21:54:34 · 1494 阅读 · 1 评论 -
查看postgres数据库端口
Linux:netstat -a | grep PGSQL示例输出:[highgo@hgdbt data]$ netstat -a | grep PGSQLunix 2 [ ACC ] STREAM LISTENING 14710 /tmp/.s.PGSQL.5866原创 2016-09-08 16:36:20 · 20361 阅读 · 2 评论