pgsql操作

一,安装

1,centos安装

2,ubuntu安装

二,命令行操作

1,\h 命令列出所有的 SQL 命令信息

2,\h alter 命令列出所有 ALTER 命令相关的帮助信息。

3,\? 命令列出 PostgreSQL 元命令的帮助信息。

4, 列出表: \dt

5,列出索引: \di

6,列出视图: \dv

7,schema

PostgreSQL 中的 schema 相当于表的命名空间。默认的命名空间是 public。如果你没有指定命名空间,当创建 foo 表时,实际上创建了 public.foo。一般地,可以为每个客户(公司)创建一个独立的命名空间。

如果不考虑命名空间,只想找到所有的表名为 users 的表:

db=# \dt *.users

8,显示对象详细信息

要想列出单个对象(如表或视图)的详细信息,使用 \d obj_name 命令,它将显示对象的所有详细信息,包括:

- 列名及其类型,是否有 NOT NULL,其默认值- 索引- 检测约束- 外键约束- 通过外键引用了当前表的所有表格- 触发器

db=# \d users

9,查找函数名

\df 可用来列出函数列表,但是该命令和上面的 \dt 等命令不同,没有加参数不会列出任何信息,这是因为函数太多了。

假设要查询含有 regexp 的所有函数:

db=# \df *regexp*

找到函数后,如果想查看它的具体定义或者要编辑,用 \ef fun_name。如果有重名函数,则加上参数,如 \ef fun_name(arg1,arg2)。命令执行后会在 $EDITOR 指定的编辑器中打开一个文件,里面的内容是包含在 CREATE OR REPLACE FUNCTION 中的函数定义体。保存并关闭该文件后,里面的代码即被执行。

当只想查看函数体,退出编辑器后不想执行里面的代码,则要在退出编辑器时使编辑器返回一个非 0 值。psql 只有当编辑器退出返回为 0 时(表示没有出错)才执行里面的代码。当使用 vim 时,用 :cq 使退出返回一个非 0 值。

10,构建查询语句

在 psql 命令行中适合输入较短的查询语句。如果语句较长,可以使用 \e 命令。\e命令会在 $EDITOR 指定的编辑中打开 psql 中的最后一条查询语句。当保存退出编辑器后,psql 将执行里面的语句。

在 psql 中也可以直接执行文件中的查询语句,用 \i filename。

\e 命令也可以接受一个文件名参数,使得文件在编辑器中打开: \e filename。但是这种方式下只支持已存在的文件,不能新建。

工作流程:

一、在 psq 中输入查询语句,用 \e 在编辑器中打开,保存到一个文件中,以后要再运行时,用 \e filename 再次打开,编辑并退出后 psql 自动运行里面的语句。

二、在同一个 tmux 窗口中打开两个 pane,一个打开 foo.sql,编辑查询语句;另一个打开 psql,运行 \e foo.sql。

11,输出内容比较

psql 中的命令默认输出到终端,但是通过 \o filename 命令可以将输出追加到 filename 上,然后再次运行 \o(不加参数),之后的命令又会恢复输出到终端中。

这个命令不适合用于导出数据,但是适合用于对输出数据进行比较:

db=# \o a.txtdb=# EXPLAIN SELECT * FROM users WHERE id IN (SELECT user_id FROM groups WHERE name = ‘admins‘);db=# \o b.txtdb=# EXPLAIN SELECT users.* FROM users LEFT JOIN groups WHERE groups.name = ‘admins‘;db=# \! vimdiff a.txt b.txt

12,克隆数据库

当在数据库上试验 migration 时,有可能会破坏原来的数据,而重建数据库会很费时

工作流程:

先创建一个克隆数据库,再在当前数据库上试验,一旦出错,删除当前数据库,从克隆数据库恢复,再重新试验。

创建克隆数据库 app_db_backup,并指定克隆的模板为 app_db:

$ createdb -T app_db app_db_backup

删除当前数据库,并恢复:

$ dropdb app_db

$ createdb -T app_db_backup app_db

提取数据

假设要将数据保存为 CSV 文件。可以使用 SQL 的 COPY 命令,或者元命令 \copy。

COPY 命令

使用 COPY 命令导出数据为 CSV:

COPY (SELEC ...)

TO ‘/absolute/path/export.csv‘

WITH (FORMAT csv, HEADER true);

该命令有一些限制,如只能指定绝对路径。只能保存到本地文件系统,即当你打开远程数据库时,保存的文件只能在远程服务器上。

\copy 命令

\copy (SELECT ...) TO export.csv WITH (FORMAT csv, HEADER true)

\copy 命令可以指定相对路径,甚至可以不用引号,但是语句只能写在一行中,因为元命令是通过回车触发的,而不是通过 ; 触发。

\copy 本质上调用的也是 COPY 命令,但是它将输出写到 STDOUT 上,然后 psql 再将输出重定向到本地文件中。

导出文件的默认编码是 UTF-8,但是 Excel 对其支持不好,如果要想在 Excel 使用,使用 latin1:

\copy (SELECT ...) TO export.csv WITH (FORMAT csv, HEADER true, ENCODING ‘latin1‘)

如果经常要执行这个命令,可以安装 psql2csv

使用方法:

$ psql2csv dbname "select * from table" > data.csv

$ psql2csv dbname < query.sql > data.csv

$ psql2csv --no-header --delimiter=$‘\t‘ --encoding=latin1 dbname <<sql

> SELECT *

> FROM some_table

> WHERE some_condition

> LIMIT 10

> sql

参考文献: comfortable with the command-line interface

三,php操作

1,连接数据库

$dbname = DB_NAME;

$curdate=date("Y-m-d H:i:s");

$pgsqlcon = pg_connect("host=".PG_DB_HOST." port=".DB_PG_PORT." dbname=multiopen user=".DB_PG_USER." password=".DB_PG_PASS);

2,创建表

$pgcreate = "CREATE TABLE $table ( cid serial NOT NULL, limitinfo JSONB , otherinfo JSON, PRIMARY KEY(cid)) ";

$res = pg_exec($pgcreate);

$pgindex = "CREATE index "."idx_lmt_".$curdate." on $pglogtable using gin (limitinfo)"; //创建表之后才能加索引。

$res = pg_exec($pgindex);

时间: 2024-08-28 01:29:47

pgsql操作的相关文章

关于pgsql 的json 和jsonb 的数据查询操作笔记整理

关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快,读取慢,jsonb写入慢,读取快. 2. 常用的操作符 操作符: -> // 右边传入整数(针对纯数组),获取数组的第n个元素,n从0开始算,返回值为json 示例: select '[{"a":"foo"},{"b":"bar&qu

PgSQL简单操作

********************************************** *基本操作 ********************************************** 数据库操作 $ psql test $ psql -h localhost -U username -W newpwd -p 5432 test =# create database mail_db; =# create database mail_db owner sunny; =# drop d

Pgsql数据库jsonb操作函数集合

CREATE OR REPLACE FUNCTION "json_object_del_path"( "json" json, "key_path" TEXT[] ) RETURNS json LANGUAGE sql IMMUTABLE STRICT AS $function$ SELECT CASE WHEN ("json" -> "key_path"[l] ) IS NULL THEN &quo

yii2 数据库操作(转)

开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),DSN( Data Source Name )是数据源名称,用于指定数据库信息.如下所示: return [ // ... 'components' => [ // ... 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbna

PgSql备份pg_dump与还原手记pg_restore

真没有想到,以前一直是PostgreSQL使用者,突然需要库移植又成了头一招了!原来它与mysql命令行操作区别还挺大.不用怕,但绝对要细心,因为数据库操作是网站的核心,一旦出现损坏或丢失,后果就非常严重了.我先写了步骤,然后按计划进行,虽然也出现了错误,但最终还是安全移植了.这里记录在案,以备后用.备份还原方法:pg_dump和pg_restore,先仔细说明这两个命令,再记录我的操作方法. pg_dump --  将一个PostgreSQL数据库抽出到一个脚本文件或者其它归档文件中pg_du

discuzx2.5 中积分操作函数以及自定义积分

转:http://www.enjoydiy.com/496.html 添加一条SQL,此 SQL 记录可以在您插件安装的时候内置在里面 PgSQL 1 2 INSERT INTO `pre_common_credit_rule` (`rulename`, `action`, `cycletype`, `cycletime`, `rewardnum`, `norepeat`, `extcredits1`, `extcredits2`, `extcredits3`, `extcredits4`, `

刀塔传奇公会管理系统 ------ Pgsql 后台

背景: 系统会给出公会人员的情况,例如 几月几日XXXX加入公会,几月几日XXXX离开工会. 系统会给出所有人最近七天的活跃总数. 需要计算出所有人最近七天的平均活跃情况,加入时间不足七天的玩家,按实际天数计算. 数据存储方式选择: 1.   开始使用的Excel做的,编写了一些宏,增加了一个按钮来触发这个宏.数据稍微一多,弊病就露出来了. 输入活跃数据时,需要手动寻找名字在第几行.多天的数据整理需要手工处理,数据量大时很容易造成数据错乱或数据丢失. 2.  计划使用Access数据库来存储,但

刀塔传奇公会管理系统 ------ Python界面访问Pgsql

今天时间不多了,只能写一部分了. Python连接Pgsql的库有三个,目前 psycopg2 用的比较多,随即下载安装了.没什么难点,参考个例子就能用了. 图形界面使用 wx 的库,因为这个有个相当好用的图形制作的工具 ----   wxFormBuilder. 有了这个,你可以单刀直入的去设计你的图形界面的样子.真真正正的实现了界面与功能的分离,设计这个玩意的人思想很牛逼. 使用方法就是,画好界面(同时写上每个事件的回调函数名字),将生成的python代码(其实可以生成好多种语言的)保存到一

WINDOW下php开启pgsql拓展

操作步骤: 1.修改php.ini,去掉“extension=php_pgsql.dll ”和“extension=php_pdo_pgsql.dll ”前的分号.2.确认C:\php\ext\下php_pgsql.dll存在3.修改path环境变量,添加了postgresql的bin目录4.进入postgresql的bin目录,复制如下文件到c:\WINDOWS\system32下, 5.重启apache,运行phpinfo.php,出现如下结果则加载成功. WINDOW下php开启pgsql