婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PostgreSQL 查看表的主外鍵等約束關系詳解

PostgreSQL 查看表的主外鍵等約束關系詳解

熱門標簽:江蘇400電話辦理官方 天津開發區地圖標注app 移動外呼系統模擬題 電銷機器人能補救房產中介嗎 廣州電銷機器人公司招聘 400電話申請客服 地圖標注要花多少錢 電話機器人怎么換人工座席 濟南外呼網絡電話線路

我就廢話不多說了,大家還是直接看代碼吧~

SELECT
   tc.constraint_name, tc.table_name, kcu.column_name, 
   ccu.table_name AS foreign_table_name,
   ccu.column_name AS foreign_column_name,
   tc.is_deferrable,tc.initially_deferred
 FROM 
   information_schema.table_constraints AS tc 
   JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
   JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
 WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name = 'your table name';

constraint_type有四種:

UNIQUE、PRIMARY KEY、CHECK、FOREIGN KEY

通過修改上邊sql語句的table_name和constraint_type來進行相應的查詢

補充:PostgreSQL查詢約束和創建刪除約束

查詢約束constraint

SELECT
   tc.constraint_name, tc.table_name, kcu.column_name, 
   ccu.table_name AS foreign_table_name,
   ccu.column_name AS foreign_column_name,
   tc.is_deferrable,tc.initially_deferred
 FROM 
   information_schema.table_constraints AS tc 
   JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
   JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
 WHERE constraint_type = 'UNIQUE' AND tc.table_name = 'table_name'; 

constraint_type有四種:

UNIQUE、PRIMARY KEY、CHECK、FOREIGN KEY, 通過修改上邊sql語句的table_name和constraint_type來進行相應的查詢。

添加約束

ALTER TABLE table_name ADD CONSTRAINT uk_users_name1 UNIQUE (NAME);

刪除約束

alter table table_name drop constraint if EXISTS uk_users_name1;

補充:PostgreSQL的依賴約束(系統表pg_depend和pg_constraint)詳解

pg_depend是postgres的一張系統表,用來記錄數據庫對象之間的依賴關系,除了常見的主外鍵,還有其他一些內部依賴關系,可以通過這個系統表呈現出來。

一、表結構:

postgres=# \d+ pg_depend
            Table "pg_catalog.pg_depend"
  Column  | Type  | Modifiers | Storage | Stats target | Description
-------------+---------+-----------+---------+--------------+-------------
 classid   | oid   | not null | plain  |       | 系統OID
 objid    | oid   | not null | plain  |       | 對象OID
 objsubid  | integer | not null | plain  |       |
 refclassid | oid   | not null | plain  |       | 引用系統OID
 refobjid  | oid   | not null | plain  |       | 引用對象ID
 refobjsubid | integer | not null | plain  |       |
 deptype   | "char" | not null | plain  |       | pg_depend類型
Indexes:
  "pg_depend_depender_index" btree (classid, objid, objsubid)
  "pg_depend_reference_index" btree (refclassid, refobjid, refobjsubid)
Has OIDs: no

--BTW:OID是Object Identifier的縮寫,是對象ID的意思,因為是無符號的4字節類型,不夠足夠大,所以一般不用來做主鍵使用,僅系統內部,比如系統表等應用,可以與一些整型數字進行轉換。與之相關的系統參數是default_with_oids,默認是off

postgres=# \d pg_constraint
   Table "pg_catalog.pg_constraint"
  Column   |   Type   | Modifiers 
---------------+--------------+-----------
 conname    | name     | not null    -- 約束名
 connamespace | oid     | not null    -- 約束所在命名空間的OID
 contype    | "char"    | not null    -- 約束類型
 condeferrable | boolean   | not null    -- 約束是否可以推遲
 condeferred  | boolean   | not null    -- 缺省情況下,約束是否可以推遲
 convalidated | boolean   | not null    -- 約束是否經過驗證
 conrelid   | oid     | not null    -- 約束所在的表的OID
 contypid   | oid     | not null    -- 約束所在的域的OID
 conindid   | oid     | not null    -- 如果是唯一、主鍵、外鍵或排除約束,則為支持這個約束的索引;否則為0
 confrelid   | oid     | not null    -- 如果是外鍵,則為參考的表;否則為 0
 confupdtype  | "char"    | not null    -- 外鍵更新操作代碼
 confdeltype  | "char"    | not null    -- 外鍵刪除操作代碼
 confmatchtype | "char"    | not null    -- 外鍵匹配類型
 conislocal  | boolean   | not null    
 coninhcount  | integer   | not null    -- 約束直接繼承祖先的數量
 connoinherit | boolean   | not null    
 conkey    | smallint[]  |     -- 如果是表約束(包含外鍵,但是不包含約束觸發器),則是約束字段的列表
 confkey    | smallint[]  |     -- 如果是一個外鍵,是參考的字段的列表
 conpfeqop   | oid[]    |     -- 如果是一個外鍵,是PK = FK比較的相等操作符的列表
 conppeqop   | oid[]    |    -- 如果是一個外鍵,是PK = PK比較的相等操作符的列表
 conffeqop   | oid[]    |     -- 如果是一個外鍵,是FK = FK比較的相等操作符的列表
 conexclop   | oid[]    |     -- 如果是一個排除約束,是每個字段排除操作符的列表
 conbin    | pg_node_tree |     -- 如果是一個檢查約束,那就是其表達式的內部形式
 consrc    | text     |     -- 如果是檢查約束,則是表達式的人類可讀形式
Indexes:
  "pg_constraint_oid_index" UNIQUE, btree (oid)
  "pg_constraint_conname_nsp_index" btree (conname, connamespace)
  "pg_constraint_conrelid_index" btree (conrelid)
  "pg_constraint_contypid_index" btree (contypid)

pg_depend.deptype字段類型9.1之后多了一個extension的類型,目前類型有

DEPENDENCY_NORMAL (n)   :普通的依賴對象,如表與schema的關系
DEPENDENCY_AUTO (a)    :自動的依賴對象,如主鍵約束
DEPENDENCY_INTERNAL (i)  :內部的依賴對象,通常是對象本身
DEPENDENCY_EXTENSION (e) :9.1新增的的擴展依賴
DEPENDENCY_PIN (p)    :系統內置的依賴

二、例子

wiki上有一個SQL可以列出系統和用戶對象的各種依賴關系,低版本的可以看wiki上的另一個寫法

SELECT classid::regclass AS "depender object class",
  CASE classid
    WHEN 'pg_class'::regclass THEN objid::regclass::text
    WHEN 'pg_type'::regclass THEN objid::regtype::text
    WHEN 'pg_proc'::regclass THEN objid::regprocedure::text
    ELSE objid::text
  END AS "depender object identity",
  objsubid,
  refclassid::regclass AS "referenced object class",
  CASE refclassid
    WHEN 'pg_class'::regclass THEN refobjid::regclass::text
    WHEN 'pg_type'::regclass THEN refobjid::regtype::text
    WHEN 'pg_proc'::regclass THEN refobjid::regprocedure::text
    ELSE refobjid::text
  END AS "referenced object identity",
  refobjsubid,
  CASE deptype
    WHEN 'p' THEN 'pinned'
    WHEN 'i' THEN 'internal'
    WHEN 'a' THEN 'automatic'
    WHEN 'n' THEN 'normal'
  END AS "dependency type"
FROM pg_catalog.pg_depend WHERE (objid >= 16384 OR refobjid >= 16384);

BTW:我通常喜歡在where后面加個條件 and deptype >'i' 排除internal依賴

建一張普通的表,執行上面的SQL

postgres=# create table tbl_parent(id int);
CREATE TABLE
postgres=# 執行上面的SQL;
 depender object class | depender object identity | objsubid | referenced object class | referenced object identity | refobjsubid | dependency type
-----------------------+--------------------------+----------+-------------------------+------------- pg_class       | tbl_parent        |    0 | pg_namespace      | 2200            |      0 | normal
(1 row)

--普通用戶來看只是建了個表,但是沒有約束,其實因為這個表是建立在schema下面,表是依賴于schema上面的

加一個主鍵約束

postgres=# alter table tbl_parent add primary key(id);
ALTER TABLE
 depender object class | depender object identity | objsubid | referenced object class | referenced object identity | refobjsubid | dependency type
-----------------------+--------------------------+----------+-------------------------+------- pg_class       | tbl_parent        |    0 | pg_namespace      | 2200            |      0 | normal
 pg_constraint     | 16469          |    0 | pg_class        | tbl_parent         |      1 | automatic
(2 rows)

--多了一個約束的信息,下面的這條信息表明這個主鍵約束是依賴于表上的,并且是自動模式,詳細信息可以在系統表pg_constrant里面查詢

三、非正常刪除

正常情況下用戶刪除有依賴關系的對象時會提示需要先刪除最里層沒依賴的對象,但是如果通過刪除系統表,但又刪得不對,就會導致異常,比如上面這個例子會出現 cache lookup failed for constraint

postgres=# select oid,conname,connamespace,contype from pg_constraint where conname like 'tbl_parent%';
 oid |   conname   | connamespace | contype
-------+-----------------+--------------+---------
 16469 | tbl_parent_pkey |     2200 | p
(1 row)
 
postgres=# delete from pg_constraint where conname like 'tbl_parent%';
DELETE 1
postgres=# select oid,conname,connamespace,contype from pg_constraint where conname like 'tbl_parent%';
 oid | conname | connamespace | contype
-----+---------+--------------+---------
(0 rows)
 
postgres=# drop table tbl_parent;
ERROR: cache lookup failed for constraint 16469  --16496是約束的OID
postgres=#

--出現這個問題,是因為手工把約束對象刪除了,但是在pg_depend依賴關系里面卻仍然存在關系,所以刪除該表時發現最里層的依賴對象找不到了就報錯了,

解決:

1.手工恢復該表的約束對象,比較難也比較煩

2.刪除該表所有的系統依賴信息 上面的問題需要刪除

postgres=# delete from pg_depend where objid = 16469 or refobjid = 16469 ;
DELETE 2
postgres=# drop table tbl_parent;
DROP TABLE

3.要說一點的是不要去手工刪除一些系統表信息來達到刪除約束的目的,容易因刪不干凈而造成各種異常

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL中enable、disable和validate外鍵約束的實例
  • postgresql 實現字符串分割字段轉列表查詢
  • postgresql 查詢集合結果用逗號分隔返回字符串處理的操作
  • postgresql數據庫連接數和狀態查詢操作
  • postgresql查詢自動將大寫的名稱轉換為小寫的案例
  • postgresql數據庫使用說明_實現時間范圍查詢
  • Postgresql 查詢表引用或被引用的外鍵操作

標簽:溫州 寶雞 昭通 榆林 海西 辛集 杭州 濮陽

巨人網絡通訊聲明:本文標題《PostgreSQL 查看表的主外鍵等約束關系詳解》,本文關鍵詞  PostgreSQL,查,看表,的,主外,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL 查看表的主外鍵等約束關系詳解》相關的同類信息!
  • 本頁收集關于PostgreSQL 查看表的主外鍵等約束關系詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成年人影院| 欧美一级片在线观看| 美美哒免费高清在线观看视频一区二区| 国产精品黄色在线观看| 欧美激情在线观看视频免费| 国产人妖乱国产精品人妖| 26uuu精品一区二区| 久久久久亚洲综合| 欧美成人vps| 国产人成一区二区三区影院| 欧美激情自拍偷拍| 亚洲人成伊人成综合网小说| 亚洲最大成人网4388xx| 亚洲国产日韩一级| 麻豆精品国产91久久久久久| 国产一区二区三区在线观看免费视频 | 欧美一区二区三区人| 91精品91久久久中77777| aaa亚洲精品一二三区| 成人免费va视频| 国产a精品视频| 成人av影视在线观看| 成人手机电影网| 97精品视频在线观看自产线路二| 成人性生交大片免费| 成人av网址在线| 色诱视频网站一区| 日本丰满少妇一区二区三区| 在线观看日韩电影| 欧美日韩国产大片| 日韩欧美一级片| 国产性天天综合网| 椎名由奈av一区二区三区| 亚洲视频免费在线| 五月天激情小说综合| 久久99精品久久久久婷婷| 国产主播一区二区| 97精品电影院| 欧美一级片在线观看| 国产午夜亚洲精品午夜鲁丝片| 日本一区二区免费在线| 一级做a爱片久久| 久久99精品久久久| 波多野洁衣一区| 91精品视频网| 日韩一区日韩二区| 久久国产精品无码网站| 欧美日韩中字一区| 日韩欧美成人一区| 日韩欧美综合在线| 亚洲国产中文字幕| 色综合色狠狠天天综合色| 欧美精品一区二区三区在线播放| 亚洲宅男天堂在线观看无病毒| 国产精品中文字幕日韩精品| 欧美丰满少妇xxxbbb| 亚洲一区在线视频| 91片黄在线观看| 综合久久国产九一剧情麻豆| 国产精品影音先锋| 国产亚洲欧美中文| 美女视频网站久久| 精品国产一区久久| 精品午夜久久福利影院| 精品国精品自拍自在线| 乱一区二区av| 欧美成人福利视频| 国内精品免费**视频| 久久综合资源网| 国产一区在线观看视频| 91精品国产入口| 青青草成人在线观看| 7777精品久久久大香线蕉| 日韩国产欧美在线播放| 欧美日韩久久久一区| 日韩成人一区二区| 久久综合狠狠综合久久激情| 国产一二三精品| 国产欧美日韩精品一区| 成人动漫中文字幕| 亚洲黄网站在线观看| 欧美色综合天天久久综合精品| 亚洲国产人成综合网站| 欧美日韩和欧美的一区二区| 蜜臀av在线播放一区二区三区| 精品久久99ma| 国产精品18久久久久久久久久久久| 久久久国产精品麻豆| 国产99久久久精品| 亚洲国产成人av网| 久久尤物电影视频在线观看| 99久久国产免费看| 亚洲国产精品麻豆| 精品国产99国产精品| av欧美精品.com| 亚洲成人高清在线| 欧美一区二区三区喷汁尤物| 一卡二卡欧美日韩| 69堂亚洲精品首页| 九色综合狠狠综合久久| 国产人妖乱国产精品人妖| eeuss影院一区二区三区| 亚洲人妖av一区二区| 91福利国产精品| 日韩1区2区日韩1区2区| 91精品国产色综合久久不卡蜜臀| 麻豆成人91精品二区三区| 久久久另类综合| 一本一道久久a久久精品| 亚洲线精品一区二区三区八戒| 欧美无砖专区一中文字| 免费看黄色91| 国产精品你懂的| 欧美亚洲精品一区| 麻豆视频观看网址久久| 国产精品国产三级国产aⅴ中文| 日本福利一区二区| 久久91精品国产91久久小草| 欧美国产一区在线| 欧美美女bb生活片| 国产大陆a不卡| 一区二区国产视频| 日韩精品一区二区三区四区| av资源网一区| 蜜臀av一级做a爰片久久| 欧美韩日一区二区三区四区| 欧美视频一区二区在线观看| 国产曰批免费观看久久久| 国产精品入口麻豆原神| 欧美一区二区视频在线观看| 成人高清伦理免费影院在线观看| 亚洲福利国产精品| 久久亚洲二区三区| 欧美在线观看一二区| 国产一区二区三区黄视频 | 久久精品亚洲精品国产欧美| 丝袜美腿亚洲综合| 夜夜嗨av一区二区三区| 日韩毛片视频在线看| 国产精品免费视频一区| 国产视频一区二区在线观看| 久久综合久久综合久久| 精品久久久久久久久久久久久久久久久 | 91精品国产乱| 4438x成人网最大色成网站| 精品视频一区 二区 三区| 欧洲av一区二区嗯嗯嗯啊| 色综合天天视频在线观看| 一本久道中文字幕精品亚洲嫩| 99re热这里只有精品视频| 91麻豆精品一区二区三区| 色婷婷精品久久二区二区蜜臂av| 成人高清av在线| 国产成人精品一区二区三区四区 | 99国产精品99久久久久久| av毛片久久久久**hd| 99国产麻豆精品| 欧美性猛交xxxx黑人交| 欧美另类一区二区三区| 91精品国产高清一区二区三区蜜臀| 91精品婷婷国产综合久久| 欧美精品一区二区三区在线播放| 久久综合九色综合97婷婷 | 在线视频你懂得一区| 色噜噜狠狠一区二区三区果冻| 91色视频在线| 制服丝袜在线91| 国产欧美精品区一区二区三区 | 六月丁香综合在线视频| 国产精品一色哟哟哟| 91理论电影在线观看| 制服.丝袜.亚洲.另类.中文| 久久影视一区二区| 亚洲免费观看在线视频| 天堂蜜桃91精品| 成人久久视频在线观看| 久久99国内精品| 粉嫩久久99精品久久久久久夜| 成人精品视频一区二区三区尤物| 丰满岳乱妇一区二区三区| 成人黄色综合网站| 91麻豆精品一区二区三区| 欧美性大战久久久久久久蜜臀| 欧美中文一区二区三区| 91麻豆精品国产91久久久久久久久| 欧美一区二区三区精品| 精品国产成人系列| 亚洲婷婷在线视频| 偷拍与自拍一区| 精品中文字幕一区二区小辣椒 | 欧美一级久久久久久久大片| 日韩精品中文字幕在线不卡尤物| 久久亚洲影视婷婷| 樱花影视一区二区| 麻豆国产精品一区二区三区 | 7777女厕盗摄久久久| 日本一区二区三区久久久久久久久不| 国产精品传媒在线| 亚洲电影在线免费观看| 激情综合网最新|