热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL数据库使用技巧

1.log日志配置PostgreSQL的系统日志和报错日志等,默认是直接输出了,没有写入到文件,如果你希望能查看这些日志,需要修改postgresql.conf,如下:log_destination’stderr’logging_collectoronlog_directory‘pg_log’log_min_durat

1.log日志配置
PostgreSQL的系统日志和报错日志等,默认是直接输出了,没有写入到文件,如果你希望能查看这些日志,需要修改postgresql.conf,如下:

log_destination = ’stderr’
logging_collector = on
log_directory = ‘pg_log’
log_min_duration_statement = 5000

上面这些参数的意思就是,把pgsql的日志到输出到pgsql数据目录的pg_log目录下,同时超过5000毫秒的操作将记录。

 
2.用户认证和监听

PostgreSQL的用户认证是通过pg_hba.conf来设置,默认都是trust,即本地帐户能直接登录。显然不安全,你可修改如下:

# “local” is for Unix domain socket connections only
local   all         all                                 md5
# IPv4 local connections:
host    all         all         127.0.0.1/32            md5
host    all         all         192.168.1.0/24          md5

上面这些参数的意思是,本地连接pgsql需要密码md5认证,192.168.1.xx 网段允许连接,密码也需要通过md5认证。
如果需要从其他客户端连接,还需要修改postgresql.conf的liston_addresses参数,这个参数和oracle的监听的作用类似。
listen_addresses = ‘*’

3.密码文件

通过2设置成md5验证后,虽然在安全方面有了提高,但是同时会造成一些麻烦,比如你的shell脚本需要使用psql能直接连接,这种情况你可以使用密码文件。通过在用户的根目录下,创建一个.pgpass文件。并将权限设置为0600。

文件的格式如下:
hostname:port:database:username:password

4.psql常用容易混淆的命令

通过psql登录到PostgreSQL,有些命令可能和其他数据库有些区别,这里和mysql对比下,介绍几个你很可能搞混的命令:
pgsql             mysql
/c                use
/q                quit
/d                desc

5.系统参数配置

PostgreSQL在安装的时候,并没有要求修改系统默认配置,那是因为其默认的内存等参数很小,不会超过系统的默认配置。例如你加大shared_buffers等参数的值时,基本都会超过默认系统参数。这时你需要修改这些配置
编辑 /etc/sysctl.conf,加入以下内容:
kernel.shmall = 3145728
kernel.shmmax = 12884901888
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
存盘退出后运行这个指令检查是否设置正确:
#sysctl -p

6.过程语言
PostgreSQL的存储过程和函数统一就叫function,当然传统意思上存储过程和函数的区别也就是,一个必须返回值,一个不需要。
目前在标准的 PostgreSQL 发布里有四种过程语言可用:
PL/pgSQL,
PL/Tcl,
PL/Perl,
PL/Python。
默认是没有安装的,例如你需要安装
CREATE [TRUSTED] [PROCEDURAL] LANGUAGE ‘language-name’
    HANDLER handler_function_name
    [VALIDATOR validator_function_name] ;

7.autovacuum

vacuum命令类似于Mysql里的optimize等命令,当对大表进行这样的操作,需要注意对业务的影响,应该是在业务比较空闲的时候进行。
从 PostgreSQL 8.1 开始,系统带有一个额外可选的 autovacuum 守护进程,用于自动执行 VACUUM 和 ANALYZE 命令。可以在postgresql.conf里进行配置。

8.获得对象创建语句

Oracle:
select dbms_metadata.get_ddl(’OBJECT_TYPE’,'OBJECT_NAME’,'OWNER’) from dual;

Mysql:
show create OBJECT OBJECT_NAME;

PostgreSQL获得对象创建语句比较折腾,需要分别处理。
8.1 表
貌似只能用 pg_dump 导出来,例如导出test数据库的t1表的结构
pg_dump -s -U test -t t1

8.2 过程和函数
pg_get_functiondef(oid)

8.3 触发器
pg_get_triggerdef(oid)

8.4 索引
pg_get_indexdef(oid)

8.5 视图
pg_get_viewdef(oid)

oid可以通过相应的系统表查出来,例如function可在pg_proc查到,注意oid是个隐藏列。

9.database、schema、objects

在PostgreSQL里的database和Mysql里的database不一样,它有点和Oracle的实例类似,每个database之间是独立的,在database和object之间

还有个schema。每个database可以创建多个schema,每个shcema又可以创建多个object。下列简单列出之间的关系:

PostgreSQL: database?shcma?object
Mysql     : database?object
Oracle    : instance?schema?object 

10.pg_dump和pg_dumpall

这2个工具的区别在于一个是备份单个database,一个备份所有的database。用惯了mysqldump,pg_dumpall很容易被忽略,为何不把这2个工具集成到一个呢?

总的来说,个人觉得PostgreSQL很多方面和Oracle是比较相似的,特别多进程的方式,相比Mysql来说要健壮的多。不过国内的PostgreSQL应用貌似很少,相关中文的资料也不多。一般来说java对应oracle,php对应mysql,python对应postgresql,是否能说python在国内的普及还是很不够呢?


推荐阅读
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 在编程实践中,正确管理和释放资源是非常重要的。本文将探讨 Python 中的 'with' 关键字及其背后的上下文管理器机制,以及它们如何帮助我们更安全、高效地管理资源。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 如何处理PHP缺少扩展的问题
    本文将详细介绍如何解决PHP环境中缺少扩展的问题,包括检查当前环境、修改配置文件以及验证修改是否生效的具体步骤,帮助开发者更好地管理和使用PHP扩展。 ... [详细]
  • spring(22)JdbcTemplate
    2019独角兽企业重金招聘Python工程师标准###1.导入jar包,必须jar包:c3p0、mysql-connector、beans、con ... [详细]
  • PHP-Casbin v3.20.0 已经发布,这是一个使用 PHP 语言开发的轻量级开源访问控制框架,支持多种访问控制模型,包括 ACL、RBAC 和 ABAC。新版本在性能上有了显著的提升。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 本文探讨了在MySQL数据库中处理大规模数据删除的最佳实践,包括分批删除、利用索引、管理事务以及选择合适的删除命令等策略,旨在提升删除效率并确保系统稳定。 ... [详细]
author-avatar
博文_Andrew-属_394
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有