日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

PostgreSQL?復制表的?5?種方式詳解_PostgreSQL

作者:不剪發的Tony老師 ? 更新時間: 2023-03-16 編程語言

PostgreSQL 提供了多種不同的復制表的方法,它們的差異在于是否需要復制表結構或者數據。

CREATE TABLE AS SELECT 語句

CREATE TABLE AS SELECT 語句可以用于復制表結構和數據,但是不會復制索引。

我們可以使用以下語句基于 employee 復制一個新表 emp2,包括表中的數據:

CREATE TABLE emp2 
AS
SELECT * FROM employee;

如果只想要復制表結構,不復制數據,可以增加 WITH NO DATA 子句:

CREATE TABLE emp2 
AS
SELECT * FROM employee
WITH NO DATA;

或者也可以使用一個不返回任何結果的查詢語句,例如:

CREATE TABLE emp2 
AS
SELECT * FROM employee
WHERE FALSE;

這種復制方法不會創建任何索引或者約束,例如主鍵、外鍵以及 NOT NULL 約束等。

CREATE TABLE LIKE 語句

CREATE TABLE LIKE 語句也可以用于復制表結構:

CREATE TABLE emp3 
(LIKE employee);

語法中的括號是必不可少的,而且這種方法不會復制數據,但是會復制字段的 NOT NULL 約束。

CREATE TABLE AS TABLE 語句

CREATE TABLE AS TABLE 語句可以復制表結構和數據,例如:

CREATE TABLE emp4 
AS 
TABLE employee
WITH NO DATA;

這種語法不會復制索引、外鍵以及非空約束等。

如果不需要復制數據,可以使用 WITH NO DATA 子句:

CREATE TABLE emp4 
AS 
TABLE employee
WITH NO DATA;

SELECT INTO 語句

SELECT INTO 語句可以復制表結構和數據,但是不包含索引等。例如:

SELECT * INTO emp5 FROM employee;

PostgreSQL 推薦使用 CREATE TABLE AS 替代 SELECT INTO 語句實現類似效果,因為前者適用性更廣,功能更全。

CREATE TABLE INHERITS 語句

PostgreSQL 支持 CREATE TABLE 語句的 INHERIT 子句,用于繼承表結構。這種復制表的方法和其他方法有所區別,任何針對父表的修改通常也會自動修改子表。

另外,這種方法還可以為子表定義額外的字段。例如:

CREATE TABLE emp5 (
    notes text NOT NULL
) 
INHERITS ( employee );

其中,notes 是我們額外定義的字段,其他字段繼承 employee。

使用 psql \d 命令查看 emp5 的結構如下:

\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

原文鏈接:https://blog.csdn.net/horses/article/details/128697909

欄目分類
最近更新