zoukankan      html  css  js  c++  java
  • PostgreSQL 知识点

    1、timestamp 有分时区和无时区(减少使用),8个字节,包含日期和时间,范围是:公元前4713 - 公元294276。底层存储的是时间戳,这对任何地区的都一样,而具体时间显示则可从数据库层面设置时区、加字段设置时区、取数据转化时区、取出后在代码层转化时区。

      自动更新时间:

      1、触发器

    create or replace function upd_timestamp() returns trigger as
    $$
    begin
        new.modified = current_timestamp;
        return new;
    end
    $$
    language plpgsql;
    
    drop table if exists ts;
    create table ts (
        id      bigserial  primary key,
        tradeid integer ,
        email varchar(50),
        num integer,
        modified timestamp default current_timestamp
    );
    create trigger t_name before update on ts for each row execute procedure upd_timestamp();

    2、自增ID有两种方法:

      1、字段类型:serial

      2、int类型需要设置sequence

    CREATE SEQUENCE gys.mytable_myid_seq
        INCREMENT 1
        START 1
        NO MINVALUE
        NO MAXVALUE
        CACHE 2;
    
    alter table gys.mytable alter column myid set default nextval('gys.mytable_myid_seq');

      函数               返回类型         描述
      nextval(regclass)           bigint         递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。
      currval(regclass)           bigint         在当前会话中返回最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过 nextval,那么会报告一个错误。)请注意因为此函数返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以用于判断其它会话是否执行过nextval。
      lastval()               bigint         返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。
      setval(regclass, bigint)       bigint         重置序列对象的计数器数值。设置序列的last_value字段为指定数值并且将其is_called字段设置为true,表示下一次nextval将在返回数值之前递增该序列。
      setval(regclass, bigint, boolean)   bigint         重置序列对象的计数器数值。功能等同于上面的setval函数,只是is_called可以设置为true或false。如果将其设置为false,那么下一次nextval将返回该数值,随后的nextval才开始递增该序列。

    3、interval

    4、schema:模式,更好地分配用户操作权限和表的划分,默认public。一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。模式(schema)是对数据库(database)逻辑分割。

    5、表空间、数据库、角色、模式及表

    6、OID:Object identifiers (OIDs) are used internally by PostgreSQL as primary keys for various system tables. 这里表明了 oid 是内部使用,并作为系统表的主键。oid是给内部表做标识用的,不推荐使用。 建议将 default_with_oids 设置为off。 建表的时候,如果想使用主键,请自行建立。oid本身大小固定的,万一 行数超过了oid 的最大限制数(4 byte int),那就无法插入新行了。

    7、char、varchar、text:在某些其它的数据库系统里,character(n) 有一定的性能优势,但在PostgreSQL里没有。事实上,character(n)通常是这三个中最慢的,因为额外存储成本。在大多数情况下,应该使用text 或character varying。

    8、索引包含null值

    9、锁表

      --查询是否锁表了
      select oid from pg_class where relname='可能锁表了的表'
      select pid from pg_locks where relation='上面查出的oid'
      --如果查询到了结果,表示该表被锁 则需要释放锁定
      select pg_cancel_backend(上面查到的pid)

  • 相关阅读:
    用Sql添加删除字段,判断字段是否存在的方法
    [转]SQL Server中获得EXEC后面的sql语句或者存储过程的返回值的方法
    sql日记(相关子查询,动态交叉表篇)
    一种迅速从datatable生成excel文件的方法
    系统设计说明书(架构、概要、详细)目录结构
    针对Web系统常用的功能测试方法浅析
    单元测试(UnitTest)入门
    文件操作概览
    C#仿QQ面板的简单实现
    用MD5和SHA1加密字符串
  • 原文地址:https://www.cnblogs.com/linguoguo/p/10709462.html
Copyright © 2011-2022 走看看