自学内容网 自学内容网

postgres 的使用

postgres的安装参考:在Centos7上安装PostgreSQL16的详细步骤_centos7安装postgresql16-CSDN博客

postgres的常用命令:

      查看所有库: \l

      进入库 :\c

      查看所有表:\d 库名;

      查看表结构:\d 表名;

      查看所有用户:\du

      显示当前库下schema信息: \dn

postgres的防火墙配置:

         在安装目录的/var/lib/pgsql/data/pg_hba.conf  文件中

创建用户:

在postgres中创建、修改用户使用role,删除用户使用user

-- 创建角色 test1  带超级权限 登录权限 配置密码为 dyh666
create role test1  with SUPERUSER LOGIN password 'dyh666';

-- 普通用户
create role test2  with  LOGIN password 'dyh666';

-- 创建复制用户
create role test3  with REPLICATION  LOGIN password 'dyh666';

-- 修改用户
alter role test1 with NOSUPERUSER login password 'dyh666';

-- 删除用户
drop user test1;

--修改将属主为 test 的表分配给 test2
reassign owned by test1 to test2;

-- 删除属于 test1 的表 
-- 需要手动删除数据库或表空间
drop owned by test1;

权限管理:

授权test1用户对test库拥有create权限
grant create on database test to test1;

    schema 权限

        -- 创建schema 默认为当前用户
        create schema  test_schema;

        -- 创建schema test2 授权给 test1 用户
        create schema test2 authorization test1;

        -- 进入schema
        set search_path to  test_schema;

        -- 查看一个database下有几个schema
        select * from information_schema.schemata;

        -- 将test_schema的拥有者设置为test用户
        alter schema test_schema  owner to test;

        -- 进入test 库
        \c test

        -- 授权 test 用户 test_chema 下的所有表,增删改查权限
        grant select,insert,update,delete on all tables in schema test_schema  to test;

        -- 删除模式
        drop schema test1;

        -- 删除模式及其包含的对象
        drop schema test2 cascade;

    角色权限:

        -- 创建角色
        create role select_group;

        -- 授权 t1 表查询权限 给角色 select_group
        grant select on t1 to select_group;

        -- 授权 select_group 组给 user_test 用户
        grant select_group to user_test;

在库里面执行:  set search_path to  test_app_schema;   切换到指定schema下面;

postgres的数据类型:

     1、数值类型:    
名字存储长度描述范围
smallint2 字节小范围整数-32768 到 +32767
integer4 字节常用的整数-2147483648 到 +2147483647
bigint8 字节大范围整数-9223372036854775808 到 +9223372036854775807
decimal可变长用户指定的精度,精确小数点前 131072 位;小数点后 16383 位
numeric可变长用户指定的精度,精确小数点前 131072 位;小数点后 16383 位
real4 字节可变精度(整数或小数),不精确6 位十进制数字精度
double precision8 字节可变精度,不精确15 位十进制数字精度
smallserial2 字节自增的小范围整数1 到 32767
serial4 字节自增整数1 到 2147483647
bigserial8 字节自增的大范围整数1 到 9223372036854775807

        create table num_test(
            real_id real,
            int_id integer,
            double_dou double precision,
            money_dou money,
            serial_id serial
        );

insert into num_test(real_id,int_id,double_dou,money_dou )values(2,3,11.22,123123.2178);

    2、货币类型:money

          money类型存储默认两位小数(四舍五入)的货币金额。
          numeric、int 和 bigint 类型的值可以转换为 money,不建议使用浮点数来处理处理货币类型,因为存在舍入错误的可能性。

名字存储容量描述范围
money8 字节货币金额-92233720368547758.08 到 +92233720368547758.07
    3、字符类型:
名字描述
varchar(n) 或 character varying(n)变长,有长度限制,最大为 10485760(1G)
char(n)或 character(n)定长,不足补空白,最大为 10485760(1G)
text变长,无长度限制

   char(n)和 character(n) 通常是效率最低的,基本上不使用,varchar和text 几乎无差异;

     4、日期时间类型:

           BC表示公元前、AD表示公元后;

名字存储空间描述最低值最高值分辨率

timestamp [ (p) ]

[ without time zone ]

8 字节日期和时间(无时区)

4713 BC

294276 AD1 毫秒 / 14 位

timestamp [ (p) ]

with time zone

8 字节日期和时间(有时区)4713 BC294276 AD1 毫秒 / 14 位
data4 字节只用于日期4713 BC5874897 AD1 天

time [ (p) ]

[ without time zone ]

8 字节只用于一日内时间(无时区)0:00:0024:00:001 毫秒 / 14 位

time [ (p) ]

with time zone

12 字节只用于一日内时间(有时区)00:00:00+145924:00:00-1459

1 毫秒 / 14 位

interval [ fields ] [ (p) ]12 字节时间间隔-178000000 年178000000 年1 毫秒 / 14 位
        (1)、建表

                create table time_test(
                    timestamp_wiout timestamp without time zone,
                    timestamp_wi timestamp with time zone,
                    date_da date,
                    time_wiout time without time zone,
                    time_wi time with time zone,
                    interval_in interval
                );

        (2)、插入数据:

                   insert into time_test values(TIMESTAMP '2024-10-15 12:11:11'
                    ,TIMESTAMP '2024-10-15 12:11:11',  date '2024-10-15'
                    ,time '12:11:11',  time '12:11:11',  interval '1 day');

        (3)、查询:to_char 将日期\时间转为字符串 

          select a.*, to_char(timestamp_wiout,'YYYY-MM-DD HH24:MI:SS'),to_char(date_da,'YYYY-MM-DD'), to_char(time_wiout,'HH24:MI:SS')from time_test a;

    5、布尔类型:
名称存储空间描述
boolean1 字节true / false
     6、枚举类型:

              创建枚举类:CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');        

              create table boen_test(
                    boolean_b boolean,    -- 布尔类型
                    enum_en mood
                );

                insert into boen_test values (false,'ok'),(true,'happy'),(null,'sad');

                select * from boen_test;

               

      7、几何类型:
名字存储空间说明表现形式
point16 字节平面中的点(x,y)
line32 字节(无穷)直线(未完全实现)((x1,y1),(x2,y2))
lseg32 字节(有限)线段((x1,y1),(x2,y2))
box32 字节矩形((x1,y1),(x2,y2))
path16+16n 字节闭合路径(与多边形类似)((x1,y1),…)
path16+16n 字节开放路径[(x1,y1),…]
polygon40+16n 字节多边形(与闭合路径相似)((x1,y1),…)
circle24 字节<(x,y),r> (圆心和半径)

            create table jihe_test(
                point_po point,
                line_l line,
                lseg_l lseg,
                box_b box,
                path_p path,
                polygon_p polygon,
                circle_c circle
            );

            insert into jihe_test values('(1,1)','(1,1), (2,2)','(1,1),(2,2)','(1,1),(2,2)','(1,1),(2,2),(3,3)','(1,1),(2,2),(3,3)','(1,1),1');

       8、网络地址类型:
名字存储空间描述
cidr7 或 19 字节IPv4 或 IPv6 网络
inet7 或 19 字节IPv4 或 IPv6 主机和网络
macaddr6 字节MAC 地址

             create table ip_test(
                cidr_c cidr,
                inet_i inet,
                macaddr_m macaddr
            );

            insert into ip_test values('192.168.100.128/25','192.168.1.1/8','08:00:2b:01:02:03');

            插入数据时会校验数据格式,如果格式不对会报错;

         9、位串类型:
名字描述说明
bit(n)bit 等效 bit(1)bit 类型的数据必须准确匹配长度 n,存储短些或者长一些的数据都是错误的
bit varying(n)bit varying 表示无长度限制bit varying 类型数据是最长 n 的变长类型,更长的串会被拒绝

            create table bit_test (   
                bit_b  bit(1),
                bit_v bit varying(10) 
             ); 

            insert into bit_test values(B'1', B'11111111');

         10、文本搜索类型:
名字描述
tsvectortsvector 的值是一个无重复值的 lexemes 排序列表, 即一些同一个词的不同变种的标准化。
tsquerytsquery 存储用于检索的词汇,并且使用布尔操作符 &(AND),|(OR)和!(NOT) 来组合它们,括号用来强调操作符的分组。

          create table text_test(
                tsvector_t tsvector,
                tsquery_t tsquery
            );
             ---- $$表述双引号,当字符串中存在单引号时使用双引号
            insert into text_test values(to_tsvector('the lexeme contains spaces') ,to_tsquery($$fat & (rat | cat)$$)),
            (to_tsvector($$the lexeme 'tt' contains spaces$$) ,to_tsquery($$fat & (rat | cat)$$)),
            (to_tsvector($$a:1 fat:2 a:6 fat:11$$) ,to_tsquery($$fat & (rat | cat)$$));
             ---- 条件匹配
            select * from text_test
            WHERE tsvector_t @@ to_tsquery('the & lexeme')
              and tsquery_t @@ to_tsvector('fat cat');

         11、UUID 类型:

                 一组 8 位数字 + 3 组 4 位数字 + 一组 12 位数字 的组合,常用作唯一标识;

                如:   a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

                uuid数据类型的字段插入时会校验数据,不符合规则就报错,通过特定的方法生成,自己写的同样组合的数据也不能插入;

         12、XML 类型:

                使用 xmlparse  产生 xml 类型的值,postgres默认安装的不支持xml,需要在安装时指定参数:configure --with-libxml(我自己也没有指定这个),用法如下:

                CREATE TABLE xml_table (xml_data XML );
                INSERT INTO xml_table (xml_data) VALUES (xmlparse(DOCUMENT '<root><name>John</name></root>'));
                SELECT xpath('/root/name/text()', xml_data) FROM xml_table;

         13、JSON类型值:

                 json也可以使用字符串类型类存储,使用json格式可以检查数据的格式,有JSON 和 JSONB两种类型,其中JSONB 使用二进制格式存储数据,更易于处理。

实例结果
array_to_json('{{1,5},{99,100}}'::int[])[[1,5],[99,100]]
row_to_json(row(1,'foo')){“f1”:1,“f2”:“foo”}
          14、数组类型:

                  数组的类型可以是任意的基本类型,如 integer[]、text[][]等;

          15、复合类型:

                  申明复合类型:create type items as (name text, age integer, address text);

             ----- JSON、数组、复合类型用法
          create table items_table(
                json_s jsonb,
                text_arr text[],
                item_i items
            );
            insert into items_table values(jsonb_build_object ( 'code', '100015', 'price', 3 ),'{"beijing","shanghai"}',('zs',12,'武汉'));
        
            select * from items_table
            where json_s ->> 'code' = '100015'   -- -> 获取的元素是json格式,->> 获得的是字符串
              and text_arr[2] = 'shanghai'
              and (item_i).age = 12                     --  复合列要用括号,否则会报错

          16、范围类型:

                范围数据类型代表着某一元素类型在一定范围内的值。
                        int4range — integer 的范围;
                        int8range —bigint的范围;
                        numrange —numeric的范围;
                        tsrange —timestamp without time zone的范围;
                        tstzrange —timestamp with time zone的范围;
                        daterange —date的范围;

            17、对象标识符:   
名字引用描述数值栗子
oid任意数字化的对象标识符564182
regprocpg_proc函数名字sum
regprocedurepg_proc带参数类型的函数sum(int4)
regoperpg_operator操作符名+
regoperatorpg_operator带参数类型的操作符*(integer,integer) 或 -(NONE,integer)
regclasspg_class关系名pg_type
regtypepg_type数据类型名integer
regconfigpg_ts_config文本搜索配置english
regdictionarypg_ts_dict文本搜索字典simple
            18、伪类型:
名字描述
any表示一个函数接受任何输入数据类型。
anyelement表示一个函数接受任何数据类型。
anyarray表示一个函数接受任意数组数据类型。
anynonarray表示一个函数接受任意非数组数据类型。
anyenum表示一个函数接受任意枚举数据类型。
anyrange表示一个函数接受任意范围数据类型。
cstring表示一个函数接受或者返回一个空结尾的 C 字符串。
internal表示一个函数接受或者返回一种服务器内部的数据类型。
language_handler一个过程语言调用处理器声明为返回 language_handler。
fdw_handler一个外部数据封装器声明为返回 fdw_handler。
record标识一个函数返回一个未声明的行类型。
trigger一个触发器函数声明为返回 trigger。
void表示一个函数不返回数值。
opaque一个已经过时的类型,以前用于所有上面这些用途。

                 


原文地址:https://blog.csdn.net/qishiheyongshi/article/details/142926616

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!