Postgresql
獲取 Postgres CREATE TABLE 語句
我使用 Django (1.9.6) 遷移創建了一些表(準確地說是 9 個),現在我試圖
CREATE TABLE
為它們獲取簡單的語句。我嘗試了這個答案,但pg_dump
以這種方式使用為 9 個表提供了超過 800 行的輸出。例如,創建第一個表的部分輸出是-- -- Name: popresearch_question; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE popresearch_question ( id integer NOT NULL, created_date timestamp with time zone NOT NULL, modified_date timestamp with time zone NOT NULL, question_text character varying(500) NOT NULL, question_template_id integer, question_type_id integer, user_id integer ); ALTER TABLE popresearch_question OWNER TO postgres; -- -- Name: popresearch_question_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE popresearch_question_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE popresearch_question_id_seq OWNER TO postgres; -- -- Name: popresearch_question_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres -- ALTER SEQUENCE popresearch_question_id_seq OWNED BY popresearch_question.id;
然後是更多的
ALTER
陳述:-- -- Name: popresearch_question id; Type: DEFAULT; Schema: public; Owner: postgres -- ALTER TABLE ONLY popresearch_question ALTER COLUMN id SET DEFAULT nextval('popresearch_question_id_seq'::regclass);
然後:
-- -- Name: popresearch_question popresearch_question_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY popresearch_question ADD CONSTRAINT popresearch_question_pkey PRIMARY KEY (id); -- -- Name: popresearch_question popresearch_question_question_text_key; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY popresearch_question ADD CONSTRAINT popresearch_question_question_text_key UNIQUE (question_text);
在那之後,至少還有十幾個
ALTER TABLE
語句只針對這個表,分散在pg_dump
輸出中。有沒有辦法獲得一個CREATE TABLE
包含所有鍵、約束等的簡單、簡潔的語句?
我不知道任何可以做到這一點的 Postgres 特定工具,也許你應該從 Django 的角度來解決這個問題:https ://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin -sql
不,沒有辦法為生成的表生成最小的 SQL。雖然作為旁注,如果你使用 IDENTITY COLUMNS 而不是
serial
你會罰款輸出更小。PostgreSQL 經過優化,可以為轉儲生成最快的 SQL;這不是最漂亮的。採用
pg_dump -s -t
-s
僅模式-t
只為表..現在您可能不需要提供的所有語句,但它只會提供有關您的特定表的語句。