Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wX1ws-0030tm-2T for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jun 2026 19:17:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wX1wp-0085l6-1h for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jun 2026 19:17:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wX1wp-0085ky-0d for pgsql-hackers@lists.postgresql.org; Tue, 09 Jun 2026 19:17:15 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wX1wn-00000001tYx-10LM for pgsql-hackers@lists.postgresql.org; Tue, 09 Jun 2026 19:17:14 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-7dca5a81be2so55826677b3.2 for ; Tue, 09 Jun 2026 12:17:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781032632; cv=none; d=google.com; s=arc-20240605; b=SqZE7NbjqzfON3jAh1DO3M+ND0JjduQKrJkt7VV3nUDgbCUPb6I3q/CiGeqC2NjWs0 ps5j00Lju7T+yS9M1yzwBF01itTyZrQ7aICecH0z3wVl0Dp7jeDSpKkkPidUlPMSRvx3 pUGhH3VB59L1NCDUeqxXL3dPGujsJ4uzjHgO4IhKu7dcNDhz4bg6Hr4PReSH2KGTwr5a qM/t0cQ+2n0/DkDrsYA+Emz741xKmMB6QuJKaw4e8/K7hpjkyEiXkL2vTpuIMIJEI0mP RUTnL8K3yqYraaVTi4MBHnxoONbw4lMxgV0uIF6AosL2BvKysP+68S4eZtOV+9baLRmB yVOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :dkim-signature; bh=g3JXBgCPw/QXlUxLdJHPHsSFO1PYakDQ1ityJqEZ8ak=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=KJOQKBvudSuRXFwiQr1JId053UILFRwcbvql8KsY5UeKkoE56dY0eVrH4j5YceqR3J qBB1TCtImi7FK3sNcupmIIgUEvPaQldWlAzxaT9VFWG3tvUKVmwOXsiLUT8oNoEVhsdK yH4hlsC3boVFWcxoklj8PbrVfktvfCTby9UFohCbZpO4X8bZF847OkDeXxUbu8zYxBzh of1RhfoYNQGPFKBpMGdwjLpRkHda3ZW7r4yB4iPgMwtJng4T35MVSjtLIsVuoOTv2HhG mAtK/ELbnYcKwPHTUTaoAas6DucByRI2oOau36TFHWo0NUb0VpGVu8GQd6lXS9j+/tbj 321w==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=percona.com; s=google; t=1781032632; x=1781637432; darn=lists.postgresql.org; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :from:to:cc:subject:date:message-id:reply-to; bh=g3JXBgCPw/QXlUxLdJHPHsSFO1PYakDQ1ityJqEZ8ak=; b=LhFN2QpNGpIckXdkKRsIs1I+jbC3mKfygnxzuOmQ2s+kwvR3ZEkdA1atc9Cu1vftip Qz+PDNPC3nmbJv0z7EaUiqTs0DKFkkgdFfDjwnEC1IkVlr7MJgIiie7y59t9+l8YUdIT Xrtb8zrkMQJ4uK6km3+E7muZ2tc/5nvoLRPmGeWibIeExWDyQbGWWuePYVrTGTUv1mNb 59zGk1x6G6dKgU/LhRUOsngMOKsDAz955yyRu05y1ypf51Sho4q5M2Fg9oV9DZwFtebB HhY0gzkdCJqNVj2DZua4s+nqaf0ztzfKpy2JBRxgJwmaRk5h2fM0yf/qonB4T/i+hJl2 Htdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032632; x=1781637432; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=g3JXBgCPw/QXlUxLdJHPHsSFO1PYakDQ1ityJqEZ8ak=; b=Js0JlHGsAFt8m71FXVFWqSg/xR3asGd50EGpjxWDsaHp+NuIcFQosGykjwWxdLEHwF wiH47wbknCS9iEIWo7Qc+mNT/C4VxtybEj3LzkBCoJ0So/FrfsEo9an6VECc7idPFVb2 OeaCllun7OlWXkzWlEk46U3WlSMbs/4bjZKmx5OTjYsF2UiRqh57yfDzlQAeTLCZ+QAn XH84bz6Wafy/pAk3XDXsdyns0SnyQQIZ1wO7b69xzARIEjluXr4hDOY8GJknBqH0d9n2 PA3dl6+boAu4ILd3ByUtcSqGcfNQ1uzu463hNBMQ/IfVt8A8KRWt2GmNf2lyAQUcPHV2 lxWw== X-Gm-Message-State: AOJu0Yxyj0kxfqCwL1+jGl51GjPN3K0Uge/OJaSAua1MTwwxyapQASBZ 2iNVOVUCzpIqts0TrYguOPXXWsqaCfTZKV1fjvmC1EuZdQ30r/VrMQp3wkiIAfgP5S63f7FlB9G 6ksaLGCkymMv18+jbjAcBalU2YPZP0JOdH9sEK6hnxR4tybhzAd9pQy0r9kVJ2vV8bGLVqWUJ9w 1JGGa9Cwej39OrESXF9cyQ5UOcyneXRf4vW1NzcYb54/eVJRcPhBkbRq33M3ZYMj7afi3pGyaq5 lO5GbF+6/qgc27LULVlU5q5VEETFLqcxoWmzHvy7JobZR0ZiaIsfAHRgJJF6VGPtgCFj9ELl+av bQ== X-Gm-Gg: Acq92OFEJPCG7VkPDjnMltP3SE0aY0I9TS9dtpMjAXlXzuwvBdMyv5i8ueczNrCAn99 uiXLvq65T9IJGwgJ6ubHrhga48PE0oh0A6IluInrMzHWA9W06tdLXxvvOumO9El/zGaOUaEC7Q7 maK8j2M3Dzy3FFb9FRgmPMuv5lVUw/F5Ho3pQD7qvNFLEMjEHBG5N7dpGzNmtFj6SLBSQDIfn8d jl3bLhJa8WjpvoxZpk4y/Yffzc206tA3CfgkuqjyK4U9GkB3fz2uD/Ar5i9gA/xzfnvIUVvk8b/ 4ymItiwpgAznzHxuOlpbOFAm6mOlEF4wKFcFChXFye5VVSRkXu2o8hJQgcDA1Iei/6BnxL+SBYG JYwc= X-Received: by 2002:a05:690c:7248:b0:7bf:245:9295 with SMTP id 00721157ae682-7f2b7c2bbdemr41666947b3.40.1781032631908; Tue, 09 Jun 2026 12:17:11 -0700 (PDT) Received: from 298783833264 named unknown by gmailapi.google.com with HTTPREST; Tue, 9 Jun 2026 14:17:11 -0500 Received: from 298783833264 named unknown by gmailapi.google.com with HTTPREST; Tue, 9 Jun 2026 14:17:11 -0500 From: Zsolt Parragi In-Reply-To: References: MIME-Version: 1.0 Date: Tue, 9 Jun 2026 14:17:11 -0500 X-Gm-Features: AVVi8CcPUXD7SdbNgrv0e44ZAeQqTnKWoKs3Mz7a2joPaudYnNlKtLQ8CuDRQSM Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: pgsql-hackers@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: percona,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Thanks, I can confirm that the previous bugs were fixed, however the bugfixes also introduce a new issue, where inherited not null constraints are missing: CREATE TABLE par (a int); CREATE TABLE ch (b int) INHERITS (par); ALTER TABLE ch ADD CONSTRAINT my_nn NOT NULL a; SELECT * FROM pg_get_table_ddl('ch','owner','false'); -- CREATE TABLE public.ch ( b integer) INHERITS (public.par); The schema_qualified => false part also doesn't work as described: + CREATE STATISTICS statement. References to + objects in the same schema as the target table (inheritance + parents, partition parents, identity sequences, and any + same-schema object the deparse helpers happen to mention) are + also emitted unqualified, so the script can be replayed under a + different search_path to recreate the table + in another schema. but: CREATE SCHEMA s1; CREATE SEQUENCE s1.myseq; CREATE FUNCTION s1.f(int) RETURNS int LANGUAGE sql IMMUTABLE AS 'SELECT $1'; CREATE TABLE s1.t ( id int DEFAULT nextval('s1.myseq'), val int, CONSTRAINT chk CHECK (s1.f(val) > 0) ); SELECT * FROM pg_get_table_ddl('s1.t', 'owner','false', 'schema_qualified','false'); -- CREATE TABLE t ( id integer DEFAULT nextval('s1.myseq'::regclass), val integer, CONSTRAINT chk CHECK ((s1.f(val) > 0))); s1 appears twice in the output. It also has an issue with strings containing the schema: CREATE SCHEMA myschema; CREATE TABLE myschema.p (id int, note text) PARTITION BY RANGE (id); CREATE TABLE myschema.pc PARTITION OF myschema.p (CONSTRAINT chk CHECK (note <> 'myschema.secret')) FOR VALUES FROM (0) TO (100); SELECT * FROM pg_get_table_ddl('myschema.pc', 'owner','false', 'schema_qualified','false'); -- CREATE TABLE pc PARTITION OF p FOR VALUES FROM (0) TO (100); -- ALTER TABLE pc ADD CONSTRAINT chk CHECK ((note <> 'secret'::text));