PostgreSQL 復(fù)制表的 5 種方式詳解
PostgreSQL 提供了多種不同的復(fù)制表的方法,它們的差異在于是否需要復(fù)制表結(jié)構(gòu)或者數(shù)據(jù)。
CREATE TABLE AS SELECT 語句
CREATE TABLE AS SELECT 語句可以用于復(fù)制表結(jié)構(gòu)和數(shù)據(jù),但是不會復(fù)制索引。
我們可以使用以下語句基于 employee 復(fù)制一個(gè)新表 emp2,包括表中的數(shù)據(jù):
CREATE TABLE emp2 AS SELECT * FROM employee;
如果只想要復(fù)制表結(jié)構(gòu),不復(fù)制數(shù)據(jù),可以增加 WITH NO DATA 子句:
CREATE TABLE emp2 AS SELECT * FROM employee WITH NO DATA;
或者也可以使用一個(gè)不返回任何結(jié)果的查詢語句,例如:
CREATE TABLE emp2 AS SELECT * FROM employee WHERE FALSE;
這種復(fù)制方法不會創(chuàng)建任何索引或者約束,例如主鍵、外鍵以及 NOT NULL 約束等。
CREATE TABLE LIKE 語句
CREATE TABLE LIKE 語句也可以用于復(fù)制表結(jié)構(gòu):
CREATE TABLE emp3 (LIKE employee);
語法中的括號是必不可少的,而且這種方法不會復(fù)制數(shù)據(jù),但是會復(fù)制字段的 NOT NULL 約束。
CREATE TABLE AS TABLE 語句
CREATE TABLE AS TABLE 語句可以復(fù)制表結(jié)構(gòu)和數(shù)據(jù),例如:
CREATE TABLE emp4 AS TABLE employee WITH NO DATA;
這種語法不會復(fù)制索引、外鍵以及非空約束等。
如果不需要復(fù)制數(shù)據(jù),可以使用 WITH NO DATA 子句:
CREATE TABLE emp4 AS TABLE employee WITH NO DATA;
SELECT INTO 語句
SELECT INTO 語句可以復(fù)制表結(jié)構(gòu)和數(shù)據(jù),但是不包含索引等。例如:
SELECT * INTO emp5 FROM employee;
PostgreSQL 推薦使用 CREATE TABLE AS 替代 SELECT INTO 語句實(shí)現(xiàn)類似效果,因?yàn)榍罢哌m用性更廣,功能更全。
CREATE TABLE INHERITS 語句
PostgreSQL 支持 CREATE TABLE 語句的 INHERIT 子句,用于繼承表結(jié)構(gòu)。這種復(fù)制表的方法和其他方法有所區(qū)別,任何針對父表的修改通常也會自動(dòng)修改子表。
另外,這種方法還可以為子表定義額外的字段。例如:
CREATE TABLE emp5 ( notes text NOT NULL ) INHERITS ( employee );
其中,notes 是我們額外定義的字段,其他字段繼承 employee。
使用 psql \d 命令查看 emp5 的結(jié)構(gòu)如下:
\d emp5 Table "public.emp5" Column | Type | Collation | Nullable | Default -----------+------------------------+-----------+----------+--------- emp_id | integer | | not null | emp_name | character varying(50) | | not null | sex | character varying(10) | | not null | dept_id | integer | | not null | manager | integer | | | hire_date | date | | not null | job_id | integer | | not null | salary | numeric(8,2) | | not null | bonus | numeric(8,2) | | | email | character varying(100) | | not null | notes | text | | not null | Check constraints: "ck_emp_salary" CHECK (salary > 0::numeric) "ck_emp_sex" CHECK (sex::text = ANY (ARRAY['男'::character varying, '女'::character varying]::text[])) Inherits: employee
到此這篇關(guān)于PostgreSQL 復(fù)制表的 5 種方式的文章就介紹到這了,更多相關(guān)PostgreSQL 復(fù)制表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostGresql 實(shí)現(xiàn)四舍五入、小數(shù)轉(zhuǎn)換、百分比的用法說明
這篇文章主要介紹了PostGresql 實(shí)現(xiàn)四舍五入、小數(shù)轉(zhuǎn)換、百分比的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01postgresql 計(jì)算兩點(diǎn)距離的2種方法小結(jié)
這篇文章主要介紹了postgresql 計(jì)算兩點(diǎn)距離的2種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL 如何查找需要收集的vacuum 表信息
這篇文章主要介紹了PostgreSQL 如何查找需要收集的vacuum 表信息,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02PostgreSQL12.5中分區(qū)表的一些操作實(shí)例
PostgreSQL支持通過表繼承進(jìn)行分區(qū),下面這篇文章主要給大家介紹了關(guān)于PostgreSQL12.5中分區(qū)表的一些操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08PostgreSQL+Pgpool實(shí)現(xiàn)HA主備切換的操作
這篇文章主要介紹了PostgreSQL+Pgpool實(shí)現(xiàn)HA主備切換操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12