PostgreSQL 使用小點

一、timestamp 有分時區和無時區(減小使用),8個字節,包含日期和時間,範圍是:公元前4713 - 公元294276。底層存儲的是時間戳,這對任何地區的都同樣,而具體時間顯示則可從數據庫層面設置時區、加字段設置時區、取數據轉化時區、取出後在代碼層轉化時區。sql

  自動更新時間:數據庫

  一、觸發器安全

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();

 

二、自增ID有兩種方法:併發

  一、字段類型:serialide

  二、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纔開始遞增該序列。性能

三、intervalspa

四、schema:模式,更好地分配用戶操做權限和表的劃分,默認public。一個用戶通常對應一個schema,該用戶的schema名等於用戶名,並做爲該用戶缺省schema。模式(schema)是對數據庫(database)邏輯分割。code

五、表空間、數據庫、角色、模式及表對象

六、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),那就沒法插入新行了。

七、char、varchar、text:在某些其它的數據庫系統裏,character(n) 有必定的性能優點,但在PostgreSQL裏沒有。事實上,character(n)一般是這三個中最慢的,由於額外存儲成本。在大多數狀況下,應該使用text 或character varying。

相關文章
相關標籤/搜索