一、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。