• pgsql操作


    一,安装

    1,centos安装

    2,ubuntu安装

    二,命令行操作

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

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

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

    4, 列出表: dt

    切换数据库,相当于MySQL的use dbname
    c dbname
    列举数据库,相当于mysql的show databases
    l
    列举表,相当于mysql的show tables
    dt
    查看表结构,相当于desc tblname,show columns from tbname
    d tblname

    修改表所属主

    ALTER DATABASE multiopen OWNER TO zmxxkj;

    重命名字段:  
    alter table [表名] rename column [字段名A] to [字段名B]; 

    给字段设置缺省值:  

    alter table [表名] alter column [字段名] set default [新的默认值];

    去除缺省值:  

    alter table [表名] alter column [字段名] drop default; 

    copyright     显示 PostgreSQL 的使用和发行条款
    encoding [字元编码名称]
                     显示或设定用户端字元编码
    h [名称]      SQL 命令语法上的说明,用 * 显示全部命令
    prompt [文本] 名称
                     提示用户设定内部变数
    password [USERNAME]
                     securely change the password for a user
    q             退出 psql

    可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库:

    pg_dump drupal>/opt/Postgresql/backup/1.bak 

    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=$' ' --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);

    ubuntu重启pgsql服务

    systemctl restart postgresql-9.5.service

    pgsql配置文件pg_hba.conf位置:/var/lib/pgsql/9.5/data


    删除索引

    DROP INDEX index;

    查询json字段

    SELECT DISTINCT(limitinfo->> 'column' ) FROM "public"."tabname" where limitinfo @> '{"column":"aaa","column2":"1"}';

  • 相关阅读:
    Unix压测工具学习
    C#获取北京时间
    MySql游标的使用以及5000万大表加索引
    【博客园客户端】博客园Android客户端更新:离线下载、本地收藏、RSS阅读
    Protobuf
    时间戳签名和或证书无法验证或已损坏(已解决)
    Vue插槽的理解和使用
    工作学习高效法则
    ES6 Promise用法小结
    绩效考核互评打分怎么操作?
  • 原文地址:https://www.cnblogs.com/Crius/p/6946678.html
Copyright © 2020-2023  润新知