国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > PostgreSQL > postgresql有rowid吗

postgresql有rowid吗

头像

爱喝马黛茶的安东尼

2019-12-25 15:17:598260浏览 · 0收藏 · 0评论

oracle中可以通过rowid定位到一条数据。索引扫描就是先根据查询条件的到对应数据的rowid,然后通过rowid得到数据,也可以直接使用rowid来查询数据,比如select * from tbl where rowid=xxx; 在没有行迁移的情况下,rowid是固定不变的。

在pg中索引扫描是先查询到数据的ctid,然后根据ctid去得到相应的数据。但是ctid和oracle中的rowid并不完全相同,因为pg中多版本的原因,ctid是会发生变化的,例如:

bill=# select ctid,* from t1 limit 5;
 ctid | id 
--------+----
 (0,1) | 1
 (0,2) | 2
 (0,3) | 3
 (0,4) | 4
 (0,5) | 5
(5 rows)
bill=# update t1 set id=111 where id =1;
UPDATE 1
bill=# vacuum ANALYZE t1;
VACUUM
bill=# select ctid,* from t1 limit 5;   
 ctid | id 
--------+----
 (0,2) | 2
 (0,3) | 3
 (0,4) | 4
 (0,5) | 5
 (0,6) | 6
(5 rows)

那在pg中如何实现类似rowid类似的功能呢?

—方法一:sequence 唯一标识

bill=# create table tbl (rowid serial8 not null, c1 int, c2 int);  
CREATE TABLE
bill=# create unique index idx_tbl_1 on tbl(rowid);  
CREATE INDEX
bill=# insert into tbl (c1,c2) values (1,2);  
INSERT 0 1
bill=# insert into tbl (c1,c2) values (1,2);  
INSERT 0 1
bill=# insert into tbl (c1,c2) values (1,2);  
INSERT 0 1
bill=# select * from tbl;
rowid | c1 | c2 
------+----+----
   1 |  1 | 2
   2 |  1 | 2
   3 |  1 | 2
(3 rows)

—方法二:identify列

bill=# create table tbl (rowid int8 GENERATED ALWAYS AS IDENTITY not null, c1 int, c2 int);  
create unique index idx_tbl_1 on tbl(rowid);  CREATE TABLE
bill=# create unique index idx_tbl_1 on tbl(rowid);  
CREATE INDEX
bill=# insert into tbl (c1,c2) values (1,2);  
INSERT 0 1
bill=# insert into tbl (c1,c2) values (1,2);  
INSERT 0 1
bill=# insert into tbl (c1,c2) values (1,2);  
INSERT 0 1
bill=# select * from tbl;  
rowid | c1 | c2 
------+----+----
  1  | 1 |  2
  2  |  1 | 2
  3  | 1 | 2
(3 rows)

—方法三:oid

bill=# /dT oid
              List of data types
Schema   | Name |  Description                
-----------+------+-------------------------------------------
pg_catalog | oid |  object identifier(oid), maximum 4 billion
(1 row)

不过oid不适合存储超过40亿条记录的表。

postgres=# create table tbl (c1 int, c2 int) with oids;  
CREATE TABLE
postgres=# create unique index idx_tbl_oid on tbl(oid); 
CREATE INDEX
postgres=# insert into tbl (c1,c2) values (1,2);  
INSERT 168528 1
postgres=# insert into tbl (c1,c2) values (1,2);  
INSERT 168529 1
postgres=# insert into tbl (c1,c2) values (1,2);  
INSERT 168530 1
postgres=# select oid,* from tbl;  
oid    | c1 | c2 
--------+----+----
168528  | 1 | 2
168529  | 1 | 2
168530  | 1 | 2
(3 rows)

不过需要注意的是,在pg12中已经不支持create table xxx with oids这种语法了。

bill=# create table tbl (c1 int, c2 int) with oids; 
psql: ERROR:  syntax error at or near "oids"
LINE 1: create table tbl (c1 int, c2 int) with oids;

pg12中是将oid作为一种数据类型来使用:

d547fe2e9793aa4530fb05ebdaf5b6b.png

bill=# create table tbl(oid oid,c1 int,c2 int);
CREATE TABLE

Python学习网,大量的免费PostgreSQL入门教程,欢迎在线学习!

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《灭火宝贝2》美国版 | 亚洲乱熟女一区二区三区山口珠理| 天美麻花星空影视免费观看电视剧 | 台湾《洞门为君开》演员表| AAA成人片爽久爽久爽| 双腿无力合拢红肿外翻男生原因| 戴着小玩具练瑜伽| 《枕边欢情》电影免费观看| 《帐篷里的秘密》动漫| 《一滴都不许漏》何泽城林荫| 《我的漂亮老师2》| 羞答答在线观看免费高清电视剧| 用毛笔刷尿孔不准尿出来怎么办| 无码免费AV片在线观看| 情趣刑具| 双男主做酱酱酿酿视频大全真人版| 二叶草M码与欧洲码的区别| YSL水蜜桃86满十八岁多少钱| 蜜桃5荷尔蒙| 美国大片又大又好看的PPT| 摸摸大扔子是讽刺人还是夸人| 成全视频高清免费观看捉妖记动漫 | 《甜蜜惩罚2》第二季的剧情| 王勉| XXXXX做受大片视频麻豆0| 人野兽马狗猪大全| 妈妈你真棒里面的插曲叫什么| 一母四女战一婿刘琴小说免费阅读 | 宝贝乖把腿开大让我添添什么歌| 《初试云雨情》法国| 国产在线观看免费全集电视剧网站| 怎么骑桌角到失禁| 高三妈妈用性缓解孩子压力| 《交换做爰》在线观看| 魂断威尼斯豆瓣| 下面的小嘴又饿了| 欧美精品| 老妇人50-60-70-80| 我和两个小婕子做过爱| 少女配狗播放视频| 女友小雪被房东老板玩