當前位置:首頁 » 數據倉庫 » postgresql查看資料庫表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

postgresql查看資料庫表

發布時間: 2022-08-28 18:29:23

A. postgresql 查看錶建立哪些索引

資料庫運維工作中,經常會有數據目錄使用率較高需要調整的情況,通常會給資料庫建立多個表空間,
並分別位於不同的盤上,這時需要做的工作就是調整庫中現有表和索引的表空間,下面簡單總結下這塊維護
工作的內容,以下都是基於 PostgreSQL 9.0.1 做的測試。

一 查詢某個表所在表空間的簡單方法

PostgreSQL 提供類似" \ "命令很方便得到相關信息,命令如下:
skytf=> \d test_2
Table "skytf.test_2"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer |
obj_id | integer | not null
name | character varying(64) |
Indexes:
"idx_hash_name" hash (name)
"idx_test_2" btree (id, obj_id)
Tablespace: "tbs_skytf_idx"
備註:如果這個表的表空間為當前資料庫的默認表空間,那麼上面則不會顯示 Tablespace 信息,
相反,則會顯示這張有的表空間,例如上面的表 test_2 的表空間為 tbs_skytf_idx,而
表空間 "tbs_skytf_idx" 不是資料庫 skytf 的默認表空間, 那麼如何查詢資料庫的默認
表空間呢,可以通過以下命令查詢。

--1.1 查詢資料庫的默認表空間
skytf=> select datname,dattablespace from pg_database where datname='skytf';
datname | dattablespace
---------+---------------
skytf | 14203070
(1 row)
skytf=> select oid,spcname from pg_tablespace where oid=14203070;
oid | spcname
----------+-----------
14203070 | tbs_skytf
(1 row)
備註:通過以上查出資料庫 skytf 的默認表空間為 tbs_skytf。

二 批量查詢資料庫表和索引的表空間
--2.1 查詢表和索引所在的表空間
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)), tb.spcname
from pg_class a, pg_tablespace tb
where a.reltablespace = tb.oid
and a.relkind in ('r', 'i')
order by a.relpages desc;

備註:上面只取了部分結果,這個查詢能夠查詢表和索引所處的表空間,但是有一點需要注意,這個查詢
僅顯示表空間不是資料庫默認表空間的資料庫對像,而我們通常需要查出位於資料庫默認表空間的
對像,顯然上面的查詢不是我們想要的,接下來看另一個查詢。

--2.2 查詢位於默認資料庫表空間的對像
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner
from pg_class a
where a.relkind in ('r', 'i')
and reltablespace='0'
order by a.relpages desc;

備註:這個查詢加入限制條件 reltablespace='0',即可查找出位於當前資料庫默認表空間的
資料庫表和索引。 通常這才是我們想要的結果,接下來可以把部分表轉移到其它表空間上去,轉移
的方法可以用 "ALTER TABLE move tablespace "或者重建索引移表空間等方法,這里不詳細介紹。

--2.3 查詢在某個表空間上的對像

select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner
from pg_class a, pg_tablespace tb
where a.relkind in ('r', 'i')
and a.reltablespace=tb.oid
and tb.spcname='tablespace_name'
order by a.relpages desc;

--2.4 手冊上對於 pgclass 視圖的 reltablespace 欄位解釋
The tablespace in which this relation is stored. If zero, the database is default tablespace is
implied. (Not meaningful if the relation has no on-disk file.)

B. 如何列出所有PostgreSQL資料庫和表

1、通過命令行查詢
\d 資料庫 —— 得到所有表的名字
\d 表名 —— 得到表結構
2、通過SQL語句查詢
"select * from pg_tables" —— 得到當前db中所有表的信息(這里pg_tables是系統視圖)
"select tablename from pg_tables where schemaname='public'" —— 得到所有用戶自定義表的名字(這里"tablename"欄位是表的名字,"schemaname"是schema的名字。用戶自定義的表,如果未經特殊處理,默認都是放在名為public的schema下)

C. 怎麼查看 PostgreSQL里的資料庫的表是否存在

往表裡更新數據前先查詢一遍被更新的數據存不存在。
通常做法是使用select 查詢過濾一遍,然後再決定是否更新,怎麼更新。
在PG庫里,除了以上方法外,還有一種更能提升性能的辦法,
使用perform來代替select。
Example:
Create or replace function test.insert_exist_test(i_id int,i_info text)
returns void
as
$BODY$
--author: kenyon
--created:2012_03_05
--purpose:test insert into a table if exists
declare
begin perform 1 from test.exists_test where id = i_id;
if not found then
insert into test.exists_test(id,info) values (i_id,i_info);
return;
else
update test.exists_test set info=i_info where id=i_id;
return;
end if;
exception when others then
raise exception 'Insert exists_test(id,info) values(%,%) error.',i_id,i_info;
return;
end;
$BODY$
language plpgsql;
使用:

select test.insert_exist_test(1,'kevin');
select test.insert_exist_test(2,'BruceLee');
select test.insert_exist_test(3,'Jacky');
select test.insert_exist_test(1,'kenyon');

D. 如何查PostgreSQL 資料庫中所有的表

"select * from pg_tables" —— 得到當前db中所有表的信息(這里pg_tables是系統視圖)
"select tablename from pg_tables where schemaname='public'" —— 得到所有用戶自定義表的名字(這里"tablename"欄位是表的名字,"schemaname"是schema的名字。用戶自定義的表,如果未經特殊處理,默認都是放在名為public的schema下)

E. 如何查看postgresql 資料庫表

1、通過命令行查詢
\d 資料庫 —— 得到所有表的名字
\d 表名 —— 得到表結構
2、通過SQL語句查詢

F. postgresql 查看有哪些表

1. 查詢表名稱

在psql狀態下查詢表名稱:dt

SQL方式查看錶名稱:

SELECTtablenameFROMpg_tables;

SELECT viewname FROM pg_views
WHERE schemaname ='public'

PostgreSQL獲取資料庫中所有view名視圖

SELECT viewname FROM pg_views

WHERE schemaname ='public'

2. 查詢表結構

在psql狀態下查詢表結構 dtablename

SQL方式查看錶結構

SELECT a.attnum,

a.attname AS field,

t.typname AS type,

a.attlen AS length,

a.atttypmod AS lengthvar,

a.attnotnull AS notnull,

b.description AS comment

FROM pg_class c,

pg_attribute a

LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t

WHERE c.relname = 'udoc_saldiscount'

and a.attnum > 0

and a.attrelid = c.oid

and a.atttypid = t.oid

ORDER BY a.attnum;

(6)postgresql查看資料庫表擴展閱讀:

PostgreSQL存儲系統是由以下幾個子模塊所構成的:

1)頁面管理子模塊:對PostgreSQL緩沖區頁面的組織結構進行定義以及提供頁面操作的方法。

2)緩沖區管理子模塊:管理PostgreSQL的緩沖區,包括本地緩沖區和共享緩沖區。

3)存儲設備管理子模塊:資料庫記錄是存儲在存儲介質上的,存儲設備管理子模塊將屏蔽不同物理存儲設備(塊設備,流設備)介面函數的差異,向上層緩沖區管理子模塊提供統一的訪問介面函數。

4)文件管理子模塊:一般的操作系統對一個進程允許打開的文件數是有限制的,而PostgreSQL伺服器有些時候需要打開的文件數是很多的,因此PostgreSQL文件管理子模塊自身為了突破這個瓶頸,封裝了文件的讀寫操作。

G. postgresql查看資料庫怎麼查看指定的模式 數據表

可以使用pgAdminIII, 連接到資料庫服務之後,展開資料庫,就可以看到"模式",再展開模式,就可以看到此模式下的數據數據表,函數等對象了。

H. 在postgresql中如何從資料庫中檢索出所有的表名

1、查看當前資料庫中所有的模式。

I. linux 怎麼查詢postgres資料庫

postgres下一些查詢有時候是不同於其他資料庫的。
查詢版本:psql --version
進入資料庫後,使用下面的方法進行查詢。
(1)顯示SQL語句執行時間
\timing on 退出資料庫失效
(2)顯示postgres中所有的表總數(包含資料庫自帶的)
select count(*) from pg_tables;
安裝好資料庫系統自帶為58個。
(3)顯示用戶生成的資料庫列表
\d
(4)顯示某個表列屬性
\d tablename
(5)刪除表中所有數據
delete from tablename --寫入日誌
Truncate Table tablename --不寫入日誌
TRUNCATE TABLE
刪除表中的所有行,而不記錄單個行刪除操作。
語法
TRUNCATE TABLE name
參數
name
是要截斷的表的名稱或要刪除其全部行的表的名稱。
注釋
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。
DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。
如果要刪除表定義及其數據,請使用 DROP TABLE 語句。
對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日誌中,所以它不能激活觸發器。
TRUNCATE TABLE 不能用於參與了索引視圖的表。
示例
下例刪除 authors 表中的所有數據。
TRUNCATE TABLE authors
(6)顯示當前用戶
\c
(7)顯示當前資料庫所有用戶
\
(8)創建用戶
create user xxx with password 'xxxxxx';
(9)更改用戶密碼
alter user xxx with password 'yyyy';
(10)更改用戶連接
\c database username
(11)更改表名
更改表名稱
alter table smallint rename to integer;

(12)更改列名
更改表列名
alter table integer rename column id to id1;

(13)顯示日期
show datestyle;
(14)設置日期格式
set datestyle=MDY;
(15)列印詳細出錯信息
postgres=# \set VERBOSITY verbose
postgres=#
postgres=#
postgres=# create table (id );
ERROR: syntax error at or near "(" at character 14
STATEMENT: create table (id );
ERROR: 42601: syntax error at or near "("
LINE 1: create table (id );
^
LOCATION: scanner_yyerror, scan.l:1044

(16)更改列屬性
postgres=# alter table a1 alter column id2 set DATA TYPE int;
(17)查看幫助信息
\h alter table
(18)列顯示
\x
(19)創建函數
CREATE OR REPLACE FUNCTION f_value_single()
returns void AS $_$
DECLARE
BEGIN
for i in 1..2000000 loop
insert into abc values(1,'a','a');
end loop;
return;
END;
$_$ language plpgsql;

將表名作為入參
create or replace function count(varchar)
returns bigint
as

selectcount(∗)fromquoteident($1);

language 'sql';

(20)關閉資料庫3種模式
SIGTERM
不再允許新的連接,但是允許所有活躍的會話正常完成他們的工作,只有在所有會話都結束任務後才關閉。這是智能關閉。

SIGINT
不再允許新的連接,向所有活躍伺服器發送 SIGTERM(讓它們立刻退出),然後等待所有子進程退出並關閉資料庫。這是快速關閉。

SIGQUIT
令 postgres 向所有子進程發送 SIGQUIT 並且立即退出(所有子進程也會立即退出),而不會妥善地關閉資料庫系統。這是立即關閉。這樣做會導致下次啟動時的恢復(通過重放 WAL 日誌)。我們推薦只在緊急的時候使用這個方法。

SIGKILL
此選項盡量不要使用,這樣會阻止伺服器清理共享內存和信號燈資源,那樣的話你只能在啟動伺服器之前自己手工做這件事。另外,SIGKILL 直接把 postgres 殺掉,而不會等它把信號中繼給它的子進程,因此我們還需要手工殺掉每個獨立子進程。