Postgresql

獲取 Postgres CREATE TABLE 語句

  • January 23, 2022

我使用 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只為表..

現在您可能不需要提供的所有語句,但它只會提供有關您的特定表的語句。

引用自:https://dba.stackexchange.com/questions/173142