CINXE.COM
git.postgresql.org Git - postgresql.git/commitdiff
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> <!-- git web interface version 2.29.2, (C) 2005-2006, Kay Sievers <kay.sievers@vrfy.org>, Christian Gierke --> <!-- git core binaries version 2.30.2 --> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <meta name="generator" content="gitweb/2.29.2 git/2.30.2"/> <meta name="robots" content="index, nofollow"/> <title>git.postgresql.org Git - postgresql.git/commitdiff</title> <link rel="stylesheet" type="text/css" href="/static/gitweb.css"/> <link rel="alternate" title="postgresql.git - log - RSS feed" href="/gitweb/?p=postgresql.git;a=rss" type="application/rss+xml" /> <link rel="alternate" title="postgresql.git - log - RSS feed (no merges)" href="/gitweb/?p=postgresql.git;a=rss;opt=--no-merges" type="application/rss+xml" /> <link rel="alternate" title="postgresql.git - log - Atom feed" href="/gitweb/?p=postgresql.git;a=atom" type="application/atom+xml" /> <link rel="alternate" title="postgresql.git - log - Atom feed (no merges)" href="/gitweb/?p=postgresql.git;a=atom;opt=--no-merges" type="application/atom+xml" /> <link rel="shortcut icon" href="/static/favicon.png" type="image/png" /> </head> <body> <div class="page_header"> <a href="http://git-scm.com/" title="git homepage"><img alt="git" class="logo" height="27" src="/static/git-logo.png" width="72" /></a><a href="/gitweb/">projects</a> / <a href="/gitweb/?p=postgresql.git;a=summary">postgresql.git</a> / commitdiff </div> <form method="get" action="/gitweb/" enctype="multipart/form-data"><div class="search"> <input name="p" type="hidden" value="postgresql.git" /> <input name="a" type="hidden" value="search" /> <input name="h" type="hidden" value="4f622503d" /> <select name="st" > <option selected="selected" value="commit">commit</option> <option value="grep">grep</option> <option value="author">author</option> <option value="committer">committer</option> <option value="pickaxe">pickaxe</option> </select> <a href="/gitweb/?p=postgresql.git;a=search_help" title="search help">?</a> search: <input type="text" name="s" /> <span title="Extended regular expression"><label><input type="checkbox" name="sr" value="1" />re</label></span></div> </form> <div class="page_nav"> <a href="/gitweb/?p=postgresql.git;a=summary">summary</a> | <a href="/gitweb/?p=postgresql.git;a=shortlog;h=4f622503d">shortlog</a> | <a href="/gitweb/?p=postgresql.git;a=log;h=4f622503d">log</a> | <a href="/gitweb/?p=postgresql.git;a=commit;h=4f622503d">commit</a> | commitdiff | <a href="/gitweb/?p=postgresql.git;a=tree;h=c09756e667e5150678e8ebf9aee6c1cd5e376a96;hb=4f622503d">tree</a><br/> <a href="/gitweb/?p=postgresql.git;a=commitdiff_plain;h=4f622503d">raw</a> | <a href="/gitweb/?p=postgresql.git;a=patch;h=4f622503d">patch</a> | inline | <a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d;ds=sidebyside">side by side</a> (parent: <a href="/gitweb/?p=postgresql.git;a=commitdiff;h=45da69371ebfc4d6982695e58791989660c1cc33">45da693</a>)<br/> </div> <div class="header"> <a class="title" href="/gitweb/?p=postgresql.git;a=commit;h=4f622503d">Make attstattarget nullable</a> </div> <div class="title_text"> <table class="object_header"> <tr><td>author</td><td><a class="list" href="/gitweb/?p=postgresql.git;a=search;h=4f622503d;s=Peter+Eisentraut;st=author" title="Search for commits authored by Peter Eisentraut">Peter Eisentraut</a> <a class="list" href="/gitweb/?p=postgresql.git;a=search;h=4f622503d;s=peter@eisentraut.org;st=author" title="Search for commits authored by peter@eisentraut.org"><peter@eisentraut.org></a></td><td rowspan="2"></td></tr> <tr><td></td><td><span class="datetime">Sat, 13 Jan 2024 17:14:53 +0000</span> (18:14 +0100)</td></tr> <tr><td>committer</td><td><a class="list" href="/gitweb/?p=postgresql.git;a=search;h=4f622503d;s=Peter+Eisentraut;st=committer" title="Search for commits committed by Peter Eisentraut">Peter Eisentraut</a> <a class="list" href="/gitweb/?p=postgresql.git;a=search;h=4f622503d;s=peter@eisentraut.org;st=committer" title="Search for commits committed by peter@eisentraut.org"><peter@eisentraut.org></a></td><td rowspan="2"></td></tr> <tr><td></td><td><span class="datetime">Sat, 13 Jan 2024 17:14:53 +0000</span> (18:14 +0100)</td></tr> </table></div> <div class="page_body"> <div class="log"> This changes the pg_attribute field attstattarget into a nullable<br/> field in the variable-length part of the row. If no value is set by<br/> the user for attstattarget, it is now null instead of previously -1.<br/> This saves space in pg_attribute and tuple descriptors for most<br/> practical scenarios. (ATTRIBUTE_FIXED_PART_SIZE is reduced from 108<br/> to 104.) Also, null is the semantically more correct value.<br/> <br/> The ANALYZE code internally continues to represent the default<br/> statistics target by -1, so that that code can avoid having to deal<br/> with null values. But that is now contained to the ANALYZE code.<br/> Only the DDL code deals with attstattarget possibly null.<br/> <br/> For system columns, the field is now always null. The ANALYZE code<br/> skips system columns anyway.<br/> <br/> To set a column's statistics target to the default value, the new<br/> command form ALTER TABLE ... SET STATISTICS DEFAULT can be used. (SET<br/> STATISTICS -1 still works.)<br/> <br/> <span class="signoff">Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org></span><br/> Discussion: https://www.postgresql.org/message-id/flat/<a class="text" href="/gitweb/?p=postgresql.git;a=object;h=4da8d211">4da8d211</a>-d54d-44b9-9847-<a class="text" href="/gitweb/?p=postgresql.git;a=object;h=f2a9f1184c76">f2a9f1184c76</a>@eisentraut.org<br/> <br/> </div> <div class="list_head"> 16 files changed: </div> <table class="diff_tree"> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=9670671107e16da0c9aec9b5d2bad8e70d64680d;hb=4f622503d">doc/src/sgml/ref/alter_table.sgml</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch1">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=9670671107e16da0c9aec9b5d2bad8e70d64680d;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=doc/src/sgml/ref/alter_table.sgml;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=doc/src/sgml/ref/alter_table.sgml;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d">src/backend/access/common/tupdesc.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch2">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/access/common/tupdesc.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/access/common/tupdesc.c;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=141b25ddd7a5c8f18d387b46e56f81f93f65142c;hb=4f622503d">src/backend/bootstrap/bootstrap.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch3">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=141b25ddd7a5c8f18d387b46e56f81f93f65142c;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/bootstrap/bootstrap.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/bootstrap/bootstrap.c;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=93553e8c3c4c28557f257eb8bd7802f6387ade95;hb=4f622503d">src/backend/catalog/genbki.pl</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch4">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=93553e8c3c4c28557f257eb8bd7802f6387ade95;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/genbki.pl;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/genbki.pl;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d">src/backend/catalog/heap.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch5">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/heap.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/heap.c;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d">src/backend/catalog/index.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch6">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/catalog/index.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/catalog/index.c;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=a03495d6c95ee11e0b4a6c4b47f106e08afb1919;hb=4f622503d">src/backend/commands/analyze.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch7">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=a03495d6c95ee11e0b4a6c4b47f106e08afb1919;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/analyze.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/analyze.c;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d">src/backend/commands/tablecmds.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch8">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/commands/tablecmds.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/commands/tablecmds.c;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d">src/backend/parser/gram.y</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch9">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/parser/gram.y;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/parser/gram.y;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=f730aa26c47f56aef4b1ca3757f49e378f7afc29;hb=4f622503d">src/backend/utils/cache/lsyscache.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch10">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=f730aa26c47f56aef4b1ca3757f49e378f7afc29;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/backend/utils/cache/lsyscache.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/backend/utils/cache/lsyscache.c;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9;hb=4f622503d">src/bin/pg_dump/pg_dump.c</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch11">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/bin/pg_dump/pg_dump.c;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/bin/pg_dump/pg_dump.c;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=460d80ac97e8b737b1d612aa7403b2aaf7cb2114;hb=4f622503d">src/include/catalog/catversion.h</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch12">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=460d80ac97e8b737b1d612aa7403b2aaf7cb2114;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/include/catalog/catversion.h;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/include/catalog/catversion.h;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=e2aadb941413d6a797ead54c2dfcb380324de5ee;hb=4f622503d">src/include/catalog/pg_attribute.h</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch13">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=e2aadb941413d6a797ead54c2dfcb380324de5ee;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/include/catalog/pg_attribute.h;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/include/catalog/pg_attribute.h;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=7f623b37fdc9b968b6cda144c29916c2214ce9e9;hb=4f622503d">src/include/commands/vacuum.h</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch14">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=7f623b37fdc9b968b6cda144c29916c2214ce9e9;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/include/commands/vacuum.h;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/include/commands/vacuum.h;hb=4f622503d">history</a></td> </tr> <tr class="dark"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=e4a200b00ec9c15030cdadee53c25a74dacb79bf;hb=4f622503d">src/include/utils/lsyscache.h</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch15">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=e4a200b00ec9c15030cdadee53c25a74dacb79bf;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/include/utils/lsyscache.h;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/include/utils/lsyscache.h;hb=4f622503d">history</a></td> </tr> <tr class="light"> <td><a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=79fa117cb54d3674aeda6749d8820d4dc66bb2ed;hb=4f622503d">src/test/regress/expected/create_index.out</a></td> <td></td> <td class="link"><a href="/gitweb/?p=postgresql.git;a=commitdiff;h=4f622503d#patch16">patch</a> | <a href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=79fa117cb54d3674aeda6749d8820d4dc66bb2ed;hb=4f622503d">blob</a> | <a href="/gitweb/?p=postgresql.git;a=blame;f=src/test/regress/expected/create_index.out;hb=4f622503d">blame</a> | <a href="/gitweb/?p=postgresql.git;a=history;f=src/test/regress/expected/create_index.out;hb=4f622503d">history</a></td> </tr> </table> <br/> <div class="patchset"> <div class="patch" id="patch1"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=eaada23024888d67b4113e09c3c9d1d824443c45">a/doc/src/sgml/ref/alter_table.sgml</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=9670671107e16da0c9aec9b5d2bad8e70d64680d;hb=4f622503d">b/doc/src/sgml/ref/alter_table.sgml</a></div> <div class="diff extended_header"> index eaada23024888d67b4113e09c3c9d1d824443c45..9670671107e16da0c9aec9b5d2bad8e70d64680d 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=eaada23024888d67b4113e09c3c9d1d824443c45">doc/src/sgml/ref/alter_table.sgml</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=9670671107e16da0c9aec9b5d2bad8e70d64680d;hb=4f622503d">doc/src/sgml/ref/alter_table.sgml</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=eaada23024888d67b4113e09c3c9d1d824443c45#l51">-51,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=9670671107e16da0c9aec9b5d2bad8e70d64680d;hb=4f622503d#l51">+51,7</a> @@</span><span class="section"> ALTER TABLE [ IF EXISTS ] <replaceable class="parameter">name</replaceable></span></div> <div class="diff ctx"> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( <replaceable>sequence_options</replaceable> ) ]</div> <div class="diff ctx"> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> { SET GENERATED { ALWAYS | BY DEFAULT } | SET <replaceable>sequence_option</replaceable> | RESTART [ [ WITH ] <replaceable class="parameter">restart</replaceable> ] } [...]</div> <div class="diff ctx"> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> DROP IDENTITY [ IF EXISTS ]</div> <div class="diff rem">- ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STATISTICS <span class="marked"><replaceable class="parameter">integer</replaceable></span></div> <div class="diff add">+ ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STATISTICS <span class="marked">{ <replaceable class="parameter">integer</replaceable> | DEFAULT }</span></div> <div class="diff ctx"> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET ( <replaceable class="parameter">attribute_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] )</div> <div class="diff ctx"> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> RESET ( <replaceable class="parameter">attribute_option</replaceable> [, ... ] )</div> <div class="diff ctx"> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=eaada23024888d67b4113e09c3c9d1d824443c45#l328">-328,9</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=doc/src/sgml/ref/alter_table.sgml;h=9670671107e16da0c9aec9b5d2bad8e70d64680d;hb=4f622503d#l328">+328,11</a> @@</span><span class="section"> WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM</span></div> <div class="diff ctx"> This form</div> <div class="diff ctx"> sets the per-column statistics-gathering target for subsequent</div> <div class="diff ctx"> <link linkend="sql-analyze"><command>ANALYZE</command></link> operations.</div> <div class="diff rem">- The target can be set in the range 0 to 10000; alternatively, set it</div> <div class="diff rem">- to -1 to revert to using the system default statistics</div> <div class="diff rem">- target (<xref linkend="guc-default-statistics-target"/>).</div> <div class="diff add">+ The target can be set in the range 0 to 10000. Set it</div> <div class="diff add">+ to <literal>DEFAULT</literal> to revert to using the system default</div> <div class="diff add">+ statistics target (<xref linkend="guc-default-statistics-target"/>).</div> <div class="diff add">+ (Setting to a value of -1 is an obsolete way spelling to get the same</div> <div class="diff add">+ outcome.)</div> <div class="diff ctx"> For more information on the use of statistics by the</div> <div class="diff ctx"> <productname>PostgreSQL</productname> query planner, refer to</div> <div class="diff ctx"> <xref linkend="planner-stats"/>.</div> </div> <div class="patch" id="patch2"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=6e7ad79834f3a5e519397e3e10909f874c7ab4da">a/src/backend/access/common/tupdesc.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d">b/src/backend/access/common/tupdesc.c</a></div> <div class="diff extended_header"> index 6e7ad79834f3a5e519397e3e10909f874c7ab4da..bc80caee1172978620f803168f7651c5570e0f27 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=6e7ad79834f3a5e519397e3e10909f874c7ab4da">src/backend/access/common/tupdesc.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d">src/backend/access/common/tupdesc.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=6e7ad79834f3a5e519397e3e10909f874c7ab4da#l453">-453,8</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d#l453">+453,6</a> @@</span><span class="section"> equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2)</span></div> <div class="diff ctx"> return false;</div> <div class="diff ctx"> if (attr1->atttypid != attr2->atttypid)</div> <div class="diff ctx"> return false;</div> <div class="diff rem">- if (attr1->attstattarget != attr2->attstattarget)</div> <div class="diff rem">- return false;</div> <div class="diff ctx"> if (attr1->attlen != attr2->attlen)</div> <div class="diff ctx"> return false;</div> <div class="diff ctx"> if (attr1->attndims != attr2->attndims)</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=6e7ad79834f3a5e519397e3e10909f874c7ab4da#l639">-639,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d#l637">+637,6</a> @@</span><span class="section"> TupleDescInitEntry(TupleDesc desc,</span></div> <div class="diff ctx"> else if (attributeName != NameStr(att->attname))</div> <div class="diff ctx"> namestrcpy(&(att->attname), attributeName);</div> <div class="diff ctx"> </div> <div class="diff rem">- att->attstattarget = -1;</div> <div class="diff ctx"> att->attcacheoff = -1;</div> <div class="diff ctx"> att->atttypmod = typmod;</div> <div class="diff ctx"> </div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=6e7ad79834f3a5e519397e3e10909f874c7ab4da#l702">-702,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/common/tupdesc.c;h=bc80caee1172978620f803168f7651c5570e0f27;hb=4f622503d#l699">+699,6</a> @@</span><span class="section"> TupleDescInitBuiltinEntry(TupleDesc desc,</span></div> <div class="diff ctx"> Assert(attributeName != NULL);</div> <div class="diff ctx"> namestrcpy(&(att->attname), attributeName);</div> <div class="diff ctx"> </div> <div class="diff rem">- att->attstattarget = -1;</div> <div class="diff ctx"> att->attcacheoff = -1;</div> <div class="diff ctx"> att->atttypmod = typmod;</div> <div class="diff ctx"> </div> </div> <div class="patch" id="patch3"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=55c53d01f8776b974104e212340aaa3a76dadbe2">a/src/backend/bootstrap/bootstrap.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=141b25ddd7a5c8f18d387b46e56f81f93f65142c;hb=4f622503d">b/src/backend/bootstrap/bootstrap.c</a></div> <div class="diff extended_header"> index 55c53d01f8776b974104e212340aaa3a76dadbe2..141b25ddd7a5c8f18d387b46e56f81f93f65142c 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=55c53d01f8776b974104e212340aaa3a76dadbe2">src/backend/bootstrap/bootstrap.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=141b25ddd7a5c8f18d387b46e56f81f93f65142c;hb=4f622503d">src/backend/bootstrap/bootstrap.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=55c53d01f8776b974104e212340aaa3a76dadbe2#l552">-552,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/bootstrap/bootstrap.c;h=141b25ddd7a5c8f18d387b46e56f81f93f65142c;hb=4f622503d#l552">+552,6</a> @@</span><span class="section"> DefineAttr(char *name, char *type, int attnum, int nullness)</span></div> <div class="diff ctx"> if (OidIsValid(attrtypes[attnum]->attcollation))</div> <div class="diff ctx"> attrtypes[attnum]->attcollation = C_COLLATION_OID;</div> <div class="diff ctx"> </div> <div class="diff rem">- attrtypes[attnum]->attstattarget = -1;</div> <div class="diff ctx"> attrtypes[attnum]->attcacheoff = -1;</div> <div class="diff ctx"> attrtypes[attnum]->atttypmod = -1;</div> <div class="diff ctx"> attrtypes[attnum]->attislocal = true;</div> </div> <div class="patch" id="patch4"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=531d7cd0d52ce3c2c101f5e1605f6740f7204702">a/src/backend/catalog/genbki.pl</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=93553e8c3c4c28557f257eb8bd7802f6387ade95;hb=4f622503d">b/src/backend/catalog/genbki.pl</a></div> <div class="diff extended_header"> index 531d7cd0d52ce3c2c101f5e1605f6740f7204702..93553e8c3c4c28557f257eb8bd7802f6387ade95 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=531d7cd0d52ce3c2c101f5e1605f6740f7204702">src/backend/catalog/genbki.pl</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=93553e8c3c4c28557f257eb8bd7802f6387ade95;hb=4f622503d">src/backend/catalog/genbki.pl</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=531d7cd0d52ce3c2c101f5e1605f6740f7204702#l840">-840,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/genbki.pl;h=93553e8c3c4c28557f257eb8bd7802f6387ade95;hb=4f622503d#l840">+840,6</a> @@</span><span class="section"> sub gen_pg_attribute</span></div> <div class="diff ctx"> my %row;</div> <div class="diff ctx"> $row{attnum} = $attnum;</div> <div class="diff ctx"> $row{attrelid} = $table->{relation_oid};</div> <div class="diff rem">- $row{attstattarget} = '0';</div> <div class="diff ctx"> </div> <div class="diff ctx"> morph_row_for_pgattr(\%row, $schema, $attr, 1);</div> <div class="diff ctx"> print_bki_insert(\%row, $schema);</div> </div> <div class="patch" id="patch5"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f">a/src/backend/catalog/heap.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d">b/src/backend/catalog/heap.c</a></div> <div class="diff extended_header"> index e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f..45a71081d429220f5e8be693c258417eb01cb746 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f">src/backend/catalog/heap.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d">src/backend/catalog/heap.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f#l749">-749,14</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d#l749">+749,16</a> @@</span><span class="section"> InsertPgAttributeTuples(Relation pg_attribute_rel,</span></div> <div class="diff ctx"> slot[slotCount]->tts_values[Anum_pg_attribute_attisdropped - 1] = BoolGetDatum(attrs->attisdropped);</div> <div class="diff ctx"> slot[slotCount]->tts_values[Anum_pg_attribute_attislocal - 1] = BoolGetDatum(attrs->attislocal);</div> <div class="diff ctx"> slot[slotCount]->tts_values[Anum_pg_attribute_attinhcount - 1] = Int16GetDatum(attrs->attinhcount);</div> <div class="diff rem">- slot[slotCount]->tts_values[Anum_pg_attribute_attstattarget - 1] = Int16GetDatum(attrs->attstattarget);</div> <div class="diff ctx"> slot[slotCount]->tts_values[Anum_pg_attribute_attcollation - 1] = ObjectIdGetDatum(attrs->attcollation);</div> <div class="diff ctx"> if (attoptions && attoptions[natts] != (Datum) 0)</div> <div class="diff ctx"> slot[slotCount]->tts_values[Anum_pg_attribute_attoptions - 1] = attoptions[natts];</div> <div class="diff ctx"> else</div> <div class="diff ctx"> slot[slotCount]->tts_isnull[Anum_pg_attribute_attoptions - 1] = true;</div> <div class="diff ctx"> </div> <div class="diff rem">- /* start out with empty permissions and empty options */</div> <div class="diff add">+ /*</div> <div class="diff add">+ * The remaining fields are not set for new columns.</div> <div class="diff add">+ */</div> <div class="diff add">+ slot[slotCount]->tts_isnull[Anum_pg_attribute_attstattarget - 1] = true;</div> <div class="diff ctx"> slot[slotCount]->tts_isnull[Anum_pg_attribute_attacl - 1] = true;</div> <div class="diff ctx"> slot[slotCount]->tts_isnull[Anum_pg_attribute_attfdwoptions - 1] = true;</div> <div class="diff ctx"> slot[slotCount]->tts_isnull[Anum_pg_attribute_attmissingval - 1] = true;</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f#l818">-818,9</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d#l820">+820,6</a> @@</span><span class="section"> AddNewAttributeTuples(Oid new_rel_oid,</span></div> <div class="diff ctx"> </div> <div class="diff ctx"> indstate = CatalogOpenIndexes(rel);</div> <div class="diff ctx"> </div> <div class="diff rem">- /* set stats detail level to a sane default */</div> <div class="diff rem">- for (int i = 0; i < natts; i++)</div> <div class="diff rem">- tupdesc->attrs[i].attstattarget = -1;</div> <div class="diff ctx"> InsertPgAttributeTuples(rel, tupdesc, new_rel_oid, NULL, indstate);</div> <div class="diff ctx"> </div> <div class="diff ctx"> /* add dependencies on their datatypes and collations */</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f#l1685">-1685,9</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d#l1684">+1684,6</a> @@</span><span class="section"> RemoveAttributeById(Oid relid, AttrNumber attnum)</span></div> <div class="diff ctx"> /* Remove any not-null constraint the column may have */</div> <div class="diff ctx"> attStruct->attnotnull = false;</div> <div class="diff ctx"> </div> <div class="diff rem">- /* We don't want to keep stats for it anymore */</div> <div class="diff rem">- attStruct->attstattarget = 0;</div> <div class="diff rem">-</div> <div class="diff ctx"> /* Unset this so no one tries to look up the generation expression */</div> <div class="diff ctx"> attStruct->attgenerated = '\0';</div> <div class="diff ctx"> </div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=e80a90ef4c0d9f83cf9a00f5c9c84a1457627c3f#l1704">-1704,9</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/heap.c;h=45a71081d429220f5e8be693c258417eb01cb746;hb=4f622503d#l1700">+1700,11</a> @@</span><span class="section"> RemoveAttributeById(Oid relid, AttrNumber attnum)</span></div> <div class="diff ctx"> replacesAtt[Anum_pg_attribute_attmissingval - 1] = true;</div> <div class="diff ctx"> </div> <div class="diff ctx"> /*</div> <div class="diff rem">- * Clear the other <span class="marked">variable-length fields. This saves some space in</span></div> <div class="diff rem">- * <span class="marked">pg_attribute </span>and removes no longer useful information.</div> <div class="diff add">+ * Clear the other <span class="marked">nullable fields. This saves some space in pg_attribute</span></div> <div class="diff add">+ * and removes no longer useful information.</div> <div class="diff ctx"> */</div> <div class="diff add">+ nullsAtt[Anum_pg_attribute_attstattarget - 1] = true;</div> <div class="diff add">+ replacesAtt[Anum_pg_attribute_attstattarget - 1] = true;</div> <div class="diff ctx"> nullsAtt[Anum_pg_attribute_attacl - 1] = true;</div> <div class="diff ctx"> replacesAtt[Anum_pg_attribute_attacl - 1] = true;</div> <div class="diff ctx"> nullsAtt[Anum_pg_attribute_attoptions - 1] = true;</div> </div> <div class="patch" id="patch6"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=88f7994b5a68ad292d3411b7094870ba10452f1d">a/src/backend/catalog/index.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d">b/src/backend/catalog/index.c</a></div> <div class="diff extended_header"> index 88f7994b5a68ad292d3411b7094870ba10452f1d..fbef3d5382d9e5bbc83b12506b93319a06f099c5 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=88f7994b5a68ad292d3411b7094870ba10452f1d">src/backend/catalog/index.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d">src/backend/catalog/index.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=88f7994b5a68ad292d3411b7094870ba10452f1d#l325">-325,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d#l325">+325,6</a> @@</span><span class="section"> ConstructTupleDescriptor(Relation heapRelation,</span></div> <div class="diff ctx"> </div> <div class="diff ctx"> MemSet(to, 0, ATTRIBUTE_FIXED_PART_SIZE);</div> <div class="diff ctx"> to->attnum = i + 1;</div> <div class="diff rem">- to->attstattarget = -1;</div> <div class="diff ctx"> to->attcacheoff = -1;</div> <div class="diff ctx"> to->attislocal = true;</div> <div class="diff ctx"> to->attcollation = (i < numkeyatts) ? collationIds[i] : InvalidOid;</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=88f7994b5a68ad292d3411b7094870ba10452f1d#l1780">-1780,10</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d#l1779">+1779,12</a> @@</span><span class="section"> index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName)</span></div> <div class="diff ctx"> while (HeapTupleIsValid((attrTuple = systable_getnext(scan))))</div> <div class="diff ctx"> {</div> <div class="diff ctx"> Form_pg_attribute att = (Form_pg_attribute) GETSTRUCT(attrTuple);</div> <div class="diff add">+ HeapTuple tp;</div> <div class="diff add">+ Datum dat;</div> <div class="diff add">+ bool isnull;</div> <div class="diff ctx"> Datum repl_val[Natts_pg_attribute];</div> <div class="diff ctx"> bool repl_null[Natts_pg_attribute];</div> <div class="diff ctx"> bool repl_repl[Natts_pg_attribute];</div> <div class="diff rem">- int attstattarget;</div> <div class="diff ctx"> HeapTuple newTuple;</div> <div class="diff ctx"> </div> <div class="diff ctx"> /* Ignore dropped columns */</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=88f7994b5a68ad292d3411b7094870ba10452f1d#l1793">-1793,10</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d#l1794">+1794,18</a> @@</span><span class="section"> index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName)</span></div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * Get attstattarget from the old index and refresh the new value.</div> <div class="diff ctx"> */</div> <div class="diff rem">- attstattarget = get_attstattarget(oldIndexId, att->attnum);</div> <div class="diff add">+ tp = SearchSysCache2(ATTNUM, ObjectIdGetDatum(oldIndexId), Int16GetDatum(att->attnum));</div> <div class="diff add">+ if (!HeapTupleIsValid(tp))</div> <div class="diff add">+ elog(ERROR, "cache lookup failed for attribute %d of relation %u",</div> <div class="diff add">+ att->attnum, oldIndexId);</div> <div class="diff add">+ dat = SysCacheGetAttr(ATTNUM, tp, Anum_pg_attribute_attstattarget, &isnull);</div> <div class="diff add">+ ReleaseSysCache(tp);</div> <div class="diff ctx"> </div> <div class="diff rem">- /* no need for a refresh if both match */</div> <div class="diff rem">- if (attstattarget == att->attstattarget)</div> <div class="diff add">+ /*</div> <div class="diff add">+ * No need for a refresh if old index value is null. (All new</div> <div class="diff add">+ * index values are null at this point.)</div> <div class="diff add">+ */</div> <div class="diff add">+ if (isnull)</div> <div class="diff ctx"> continue;</div> <div class="diff ctx"> </div> <div class="diff ctx"> memset(repl_val, 0, sizeof(repl_val));</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=88f7994b5a68ad292d3411b7094870ba10452f1d#l1804">-1804,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/index.c;h=fbef3d5382d9e5bbc83b12506b93319a06f099c5;hb=4f622503d#l1813">+1813,7</a> @@</span><span class="section"> index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName)</span></div> <div class="diff ctx"> memset(repl_repl, false, sizeof(repl_repl));</div> <div class="diff ctx"> </div> <div class="diff ctx"> repl_repl[Anum_pg_attribute_attstattarget - 1] = true;</div> <div class="diff rem">- repl_val[Anum_pg_attribute_attstattarget - 1] = <span class="marked">Int16GetDatum(attstattarget)</span>;</div> <div class="diff add">+ repl_val[Anum_pg_attribute_attstattarget - 1] = <span class="marked">dat</span>;</div> <div class="diff ctx"> </div> <div class="diff ctx"> newTuple = heap_modify_tuple(attrTuple,</div> <div class="diff ctx"> RelationGetDescr(pg_attribute),</div> </div> <div class="patch" id="patch7"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=deef865ce6deddf57054364623902aab9c88e821">a/src/backend/commands/analyze.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=a03495d6c95ee11e0b4a6c4b47f106e08afb1919;hb=4f622503d">b/src/backend/commands/analyze.c</a></div> <div class="diff extended_header"> index deef865ce6deddf57054364623902aab9c88e821..a03495d6c95ee11e0b4a6c4b47f106e08afb1919 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=deef865ce6deddf57054364623902aab9c88e821">src/backend/commands/analyze.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=a03495d6c95ee11e0b4a6c4b47f106e08afb1919;hb=4f622503d">src/backend/commands/analyze.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=deef865ce6deddf57054364623902aab9c88e821#l1004">-1004,6</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=a03495d6c95ee11e0b4a6c4b47f106e08afb1919;hb=4f622503d#l1004">+1004,10</a> @@</span><span class="section"> static VacAttrStats *</span></div> <div class="diff ctx"> examine_attribute(Relation onerel, int attnum, Node *index_expr)</div> <div class="diff ctx"> {</div> <div class="diff ctx"> Form_pg_attribute attr = TupleDescAttr(onerel->rd_att, attnum - 1);</div> <div class="diff add">+ int attstattarget;</div> <div class="diff add">+ HeapTuple atttuple;</div> <div class="diff add">+ Datum dat;</div> <div class="diff add">+ bool isnull;</div> <div class="diff ctx"> HeapTuple typtuple;</div> <div class="diff ctx"> VacAttrStats *stats;</div> <div class="diff ctx"> int i;</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=deef865ce6deddf57054364623902aab9c88e821#l1013">-1013,15</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/analyze.c;h=a03495d6c95ee11e0b4a6c4b47f106e08afb1919;hb=4f622503d#l1017">+1017,28</a> @@</span><span class="section"> examine_attribute(Relation onerel, int attnum, Node *index_expr)</span></div> <div class="diff ctx"> if (attr->attisdropped)</div> <div class="diff ctx"> return NULL;</div> <div class="diff ctx"> </div> <div class="diff add">+ /*</div> <div class="diff add">+ * Get attstattarget value. Set to -1 if null. (Analyze functions expect</div> <div class="diff add">+ * -1 to mean use default_statistics_target; see for example</div> <div class="diff add">+ * std_typanalyze.)</div> <div class="diff add">+ */</div> <div class="diff add">+ atttuple = SearchSysCache2(ATTNUM, ObjectIdGetDatum(RelationGetRelid(onerel)), Int16GetDatum(attnum));</div> <div class="diff add">+ if (!HeapTupleIsValid(atttuple))</div> <div class="diff add">+ elog(ERROR, "cache lookup failed for attribute %d of relation %u",</div> <div class="diff add">+ attnum, RelationGetRelid(onerel));</div> <div class="diff add">+ dat = SysCacheGetAttr(ATTNUM, atttuple, Anum_pg_attribute_attstattarget, &isnull);</div> <div class="diff add">+ attstattarget = isnull ? -1 : DatumGetInt16(dat);</div> <div class="diff add">+ ReleaseSysCache(atttuple);</div> <div class="diff add">+</div> <div class="diff ctx"> /* Don't analyze column if user has specified not to */</div> <div class="diff rem">- if (att<span class="marked">r->att</span>stattarget == 0)</div> <div class="diff add">+ if (attstattarget == 0)</div> <div class="diff ctx"> return NULL;</div> <div class="diff ctx"> </div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * Create the VacAttrStats struct.</div> <div class="diff ctx"> */</div> <div class="diff ctx"> stats = (VacAttrStats *) palloc0(sizeof(VacAttrStats));</div> <div class="diff rem">- stats->attstattarget = att<span class="marked">r->att</span>stattarget;</div> <div class="diff add">+ stats->attstattarget = attstattarget;</div> <div class="diff ctx"> </div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * When analyzing an expression index, believe the expression tree's type</div> </div> <div class="patch" id="patch8"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57">a/src/backend/commands/tablecmds.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d">b/src/backend/commands/tablecmds.c</a></div> <div class="diff extended_header"> index 5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57..5496f1268261ad1d2883ad9e458d4414571bfd6e 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57">src/backend/commands/tablecmds.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d">src/backend/commands/tablecmds.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57#l8543">-8543,10</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d#l8543">+8543,14</a> @@</span><span class="section"> ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa</span></div> <div class="diff ctx"> {</div> <div class="diff ctx"> int newtarget;</div> <div class="diff ctx"> Relation attrelation;</div> <div class="diff rem">- HeapTuple tuple;</div> <div class="diff add">+ HeapTuple tuple,</div> <div class="diff add">+ newtuple;</div> <div class="diff ctx"> Form_pg_attribute attrtuple;</div> <div class="diff ctx"> AttrNumber attnum;</div> <div class="diff ctx"> ObjectAddress address;</div> <div class="diff add">+ Datum repl_val[Natts_pg_attribute];</div> <div class="diff add">+ bool repl_null[Natts_pg_attribute];</div> <div class="diff add">+ bool repl_repl[Natts_pg_attribute];</div> <div class="diff ctx"> </div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * We allow referencing columns by numbers only for indexes, since table</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57#l8559">-8559,8</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d#l8563">+8563,18</a> @@</span><span class="section"> ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa</span></div> <div class="diff ctx"> (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),</div> <div class="diff ctx"> errmsg("cannot refer to non-index column by number")));</div> <div class="diff ctx"> </div> <div class="diff rem">- Assert(IsA(newValue, Integer));</div> <div class="diff rem">- newtarget = intVal(newValue);</div> <div class="diff add">+ if (newValue)</div> <div class="diff add">+ {</div> <div class="diff add">+ Assert(IsA(newValue, Integer));</div> <div class="diff add">+ newtarget = intVal(newValue);</div> <div class="diff add">+ }</div> <div class="diff add">+ else</div> <div class="diff add">+ {</div> <div class="diff add">+ /*</div> <div class="diff add">+ * -1 was used in previous versions to represent the default setting</div> <div class="diff add">+ */</div> <div class="diff add">+ newtarget = -1;</div> <div class="diff add">+ }</div> <div class="diff ctx"> </div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * Limit target to a sane range</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57#l8585">-8585,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d#l8599">+8599,7</a> @@</span><span class="section"> ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa</span></div> <div class="diff ctx"> </div> <div class="diff ctx"> if (colName)</div> <div class="diff ctx"> {</div> <div class="diff rem">- tuple = SearchSysCache<span class="marked">Copy</span>AttName(RelationGetRelid(rel), colName);</div> <div class="diff add">+ tuple = SearchSysCacheAttName(RelationGetRelid(rel), colName);</div> <div class="diff ctx"> </div> <div class="diff ctx"> if (!HeapTupleIsValid(tuple))</div> <div class="diff ctx"> ereport(ERROR,</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57#l8595">-8595,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d#l8609">+8609,7</a> @@</span><span class="section"> ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa</span></div> <div class="diff ctx"> }</div> <div class="diff ctx"> else</div> <div class="diff ctx"> {</div> <div class="diff rem">- tuple = SearchSysCache<span class="marked">Copy</span>AttNum(RelationGetRelid(rel), colNum);</div> <div class="diff add">+ tuple = SearchSysCacheAttNum(RelationGetRelid(rel), colNum);</div> <div class="diff ctx"> </div> <div class="diff ctx"> if (!HeapTupleIsValid(tuple))</div> <div class="diff ctx"> ereport(ERROR,</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5e558fabf65a6f4c5e1ed956f7e994ea0dfaab57#l8629">-8629,16</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/tablecmds.c;h=5496f1268261ad1d2883ad9e458d4414571bfd6e;hb=4f622503d#l8643">+8643,27</a> @@</span><span class="section"> ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa</span></div> <div class="diff ctx"> errhint("Alter statistics on table column instead.")));</div> <div class="diff ctx"> }</div> <div class="diff ctx"> </div> <div class="diff rem">- attrtuple->attstattarget = newtarget;</div> <div class="diff rem">-</div> <div class="diff rem">- CatalogTupleUpdate(attrelation, &tuple->t_self, tuple);</div> <div class="diff add">+ /* Build new tuple. */</div> <div class="diff add">+ memset(repl_null, false, sizeof(repl_null));</div> <div class="diff add">+ memset(repl_repl, false, sizeof(repl_repl));</div> <div class="diff add">+ if (newtarget != -1)</div> <div class="diff add">+ repl_val[Anum_pg_attribute_attstattarget - 1] = newtarget;</div> <div class="diff add">+ else</div> <div class="diff add">+ repl_null[Anum_pg_attribute_attstattarget - 1] = true;</div> <div class="diff add">+ repl_repl[Anum_pg_attribute_attstattarget - 1] = true;</div> <div class="diff add">+ newtuple = heap_modify_tuple(tuple, RelationGetDescr(attrelation),</div> <div class="diff add">+ repl_val, repl_null, repl_repl);</div> <div class="diff add">+ CatalogTupleUpdate(attrelation, &tuple->t_self, newtuple);</div> <div class="diff ctx"> </div> <div class="diff ctx"> InvokeObjectPostAlterHook(RelationRelationId,</div> <div class="diff ctx"> RelationGetRelid(rel),</div> <div class="diff ctx"> attrtuple->attnum);</div> <div class="diff ctx"> ObjectAddressSubSet(address, RelationRelationId,</div> <div class="diff ctx"> RelationGetRelid(rel), attnum);</div> <div class="diff rem">- heap_freetuple(tuple);</div> <div class="diff add">+</div> <div class="diff add">+ heap_freetuple(newtuple);</div> <div class="diff add">+</div> <div class="diff add">+ ReleaseSysCache(tuple);</div> <div class="diff ctx"> </div> <div class="diff ctx"> table_close(attrelation, RowExclusiveLock);</div> <div class="diff ctx"> </div> </div> <div class="patch" id="patch9"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=6b88096e8e1c09baf3f654540f3554f67b471cf2">a/src/backend/parser/gram.y</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d">b/src/backend/parser/gram.y</a></div> <div class="diff extended_header"> index 6b88096e8e1c09baf3f654540f3554f67b471cf2..3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=6b88096e8e1c09baf3f654540f3554f67b471cf2">src/backend/parser/gram.y</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d">src/backend/parser/gram.y</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=6b88096e8e1c09baf3f654540f3554f67b471cf2#l337">-337,6</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d#l337">+337,7</a> @@</span><span class="section"> static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);</span></div> <div class="diff ctx"> %type <list> alter_table_cmds alter_type_cmds</div> <div class="diff ctx"> %type <list> alter_identity_column_option_list</div> <div class="diff ctx"> %type <defelt> alter_identity_column_option</div> <div class="diff add">+%type <node> set_statistics_value</div> <div class="diff ctx"> </div> <div class="diff ctx"> %type <list> createdb_opt_list createdb_opt_items copy_opt_list</div> <div class="diff ctx"> transaction_mode_list</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=6b88096e8e1c09baf3f654540f3554f67b471cf2#l2446">-2446,18</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d#l2447">+2447,18</a> @@</span><span class="section"> alter_table_cmd:</span></div> <div class="diff ctx"> n->missing_ok = true;</div> <div class="diff ctx"> $$ = (Node *) n;</div> <div class="diff ctx"> }</div> <div class="diff rem">- /* ALTER TABLE <name> ALTER [COLUMN] <colname> SET STATISTICS <span class="marked"><SignedIconst> </span>*/</div> <div class="diff rem">- | ALTER opt_column ColId SET STATISTICS <span class="marked">SignedIconst</span></div> <div class="diff add">+ /* ALTER TABLE <name> ALTER [COLUMN] <colname> SET STATISTICS */</div> <div class="diff add">+ | ALTER opt_column ColId SET STATISTICS <span class="marked">set_statistics_value</span></div> <div class="diff ctx"> {</div> <div class="diff ctx"> AlterTableCmd *n = makeNode(AlterTableCmd);</div> <div class="diff ctx"> </div> <div class="diff ctx"> n->subtype = AT_SetStatistics;</div> <div class="diff ctx"> n->name = $3;</div> <div class="diff rem">- n->def = <span class="marked">(Node *) makeInteger($6)</span>;</div> <div class="diff add">+ n->def = <span class="marked">$6</span>;</div> <div class="diff ctx"> $$ = (Node *) n;</div> <div class="diff ctx"> }</div> <div class="diff rem">- /* ALTER TABLE <name> ALTER [COLUMN] <colnum> SET STATISTICS <span class="marked"><SignedIconst> </span>*/</div> <div class="diff rem">- | ALTER opt_column Iconst SET STATISTICS <span class="marked">SignedIconst</span></div> <div class="diff add">+ /* ALTER TABLE <name> ALTER [COLUMN] <colnum> SET STATISTICS */</div> <div class="diff add">+ | ALTER opt_column Iconst SET STATISTICS <span class="marked">set_statistics_value</span></div> <div class="diff ctx"> {</div> <div class="diff ctx"> AlterTableCmd *n = makeNode(AlterTableCmd);</div> <div class="diff ctx"> </div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=6b88096e8e1c09baf3f654540f3554f67b471cf2#l2469">-2469,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d#l2470">+2470,7</a> @@</span><span class="section"> alter_table_cmd:</span></div> <div class="diff ctx"> </div> <div class="diff ctx"> n->subtype = AT_SetStatistics;</div> <div class="diff ctx"> n->num = (int16) $3;</div> <div class="diff rem">- n->def = <span class="marked">(Node *) makeInteger($6)</span>;</div> <div class="diff add">+ n->def = <span class="marked">$6</span>;</div> <div class="diff ctx"> $$ = (Node *) n;</div> <div class="diff ctx"> }</div> <div class="diff ctx"> /* ALTER TABLE <name> ALTER [COLUMN] <colname> SET ( column_parameter = value [, ... ] ) */</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=6b88096e8e1c09baf3f654540f3554f67b471cf2#l3070">-3070,6</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/parser/gram.y;h=3460fea56bacf8ef6b26d786b9c3965cc2a5aa6c;hb=4f622503d#l3071">+3071,11</a> @@</span><span class="section"> alter_identity_column_option:</span></div> <div class="diff ctx"> }</div> <div class="diff ctx"> ;</div> <div class="diff ctx"> </div> <div class="diff add">+set_statistics_value:</div> <div class="diff add">+ SignedIconst { $$ = (Node *) makeInteger($1); }</div> <div class="diff add">+ | DEFAULT { $$ = NULL; }</div> <div class="diff add">+ ;</div> <div class="diff add">+</div> <div class="diff ctx"> PartitionBoundSpec:</div> <div class="diff ctx"> /* a HASH partition */</div> <div class="diff ctx"> FOR VALUES WITH '(' hash_partbound ')'</div> </div> <div class="patch" id="patch10"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=8ec83561bfa1d7fcb99b129228646c095488aab0">a/src/backend/utils/cache/lsyscache.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=f730aa26c47f56aef4b1ca3757f49e378f7afc29;hb=4f622503d">b/src/backend/utils/cache/lsyscache.c</a></div> <div class="diff extended_header"> index 8ec83561bfa1d7fcb99b129228646c095488aab0..f730aa26c47f56aef4b1ca3757f49e378f7afc29 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=8ec83561bfa1d7fcb99b129228646c095488aab0">src/backend/utils/cache/lsyscache.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=f730aa26c47f56aef4b1ca3757f49e378f7afc29;hb=4f622503d">src/backend/utils/cache/lsyscache.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=8ec83561bfa1d7fcb99b129228646c095488aab0#l872">-872,33</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/cache/lsyscache.c;h=f730aa26c47f56aef4b1ca3757f49e378f7afc29;hb=4f622503d#l872">+872,6</a> @@</span><span class="section"> get_attnum(Oid relid, const char *attname)</span></div> <div class="diff ctx"> return InvalidAttrNumber;</div> <div class="diff ctx"> }</div> <div class="diff ctx"> </div> <div class="diff rem">-/*</div> <div class="diff rem">- * get_attstattarget</div> <div class="diff rem">- *</div> <div class="diff rem">- * Given the relation id and the attribute number,</div> <div class="diff rem">- * return the "attstattarget" field from the attribute relation.</div> <div class="diff rem">- *</div> <div class="diff rem">- * Errors if not found.</div> <div class="diff rem">- */</div> <div class="diff rem">-int</div> <div class="diff rem">-get_attstattarget(Oid relid, AttrNumber attnum)</div> <div class="diff rem">-{</div> <div class="diff rem">- HeapTuple tp;</div> <div class="diff rem">- Form_pg_attribute att_tup;</div> <div class="diff rem">- int result;</div> <div class="diff rem">-</div> <div class="diff rem">- tp = SearchSysCache2(ATTNUM,</div> <div class="diff rem">- ObjectIdGetDatum(relid),</div> <div class="diff rem">- Int16GetDatum(attnum));</div> <div class="diff rem">- if (!HeapTupleIsValid(tp))</div> <div class="diff rem">- elog(ERROR, "cache lookup failed for attribute %d of relation %u",</div> <div class="diff rem">- attnum, relid);</div> <div class="diff rem">- att_tup = (Form_pg_attribute) GETSTRUCT(tp);</div> <div class="diff rem">- result = att_tup->attstattarget;</div> <div class="diff rem">- ReleaseSysCache(tp);</div> <div class="diff rem">- return result;</div> <div class="diff rem">-}</div> <div class="diff rem">-</div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * get_attgenerated</div> <div class="diff ctx"> *</div> </div> <div class="patch" id="patch11"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=22d1e6cf92261d654731e3044f1dc495ae0c5435">a/src/bin/pg_dump/pg_dump.c</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9;hb=4f622503d">b/src/bin/pg_dump/pg_dump.c</a></div> <div class="diff extended_header"> index 22d1e6cf92261d654731e3044f1dc495ae0c5435..d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=22d1e6cf92261d654731e3044f1dc495ae0c5435">src/bin/pg_dump/pg_dump.c</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9;hb=4f622503d">src/bin/pg_dump/pg_dump.c</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=22d1e6cf92261d654731e3044f1dc495ae0c5435#l8925">-8925,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9;hb=4f622503d#l8925">+8925,10</a> @@</span><span class="section"> getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)</span></div> <div class="diff ctx"> tbinfo->dobj.name);</div> <div class="diff ctx"> tbinfo->attnames[j] = pg_strdup(PQgetvalue(res, r, i_attname));</div> <div class="diff ctx"> tbinfo->atttypnames[j] = pg_strdup(PQgetvalue(res, r, i_atttypname));</div> <div class="diff rem">- tbinfo->attstattarget[j] = atoi(PQgetvalue(res, r, i_attstattarget));</div> <div class="diff add">+ if (PQgetisnull(res, r, i_attstattarget))</div> <div class="diff add">+ tbinfo->attstattarget[j] = -1;</div> <div class="diff add">+ else</div> <div class="diff add">+ tbinfo->attstattarget[j] = atoi(PQgetvalue(res, r, i_attstattarget));</div> <div class="diff ctx"> tbinfo->attstorage[j] = *(PQgetvalue(res, r, i_attstorage));</div> <div class="diff ctx"> tbinfo->typstorage[j] = *(PQgetvalue(res, r, i_typstorage));</div> <div class="diff ctx"> tbinfo->attidentity[j] = *(PQgetvalue(res, r, i_attidentity));</div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=22d1e6cf92261d654731e3044f1dc495ae0c5435#l16507">-16507,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/bin/pg_dump/pg_dump.c;h=d4a888f5f137c08e8a5dc0a6b904d87a0d693ea9;hb=4f622503d#l16510">+16510,7</a> @@</span><span class="section"> dumpTableSchema(Archive *fout, const TableInfo *tbinfo)</span></div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * Dump per-column statistics information. We only issue an ALTER</div> <div class="diff ctx"> * TABLE statement if the attstattarget entry for this column is</div> <div class="diff rem">- * no<span class="marked">n-negative (i.e. it's not the default value)</span></div> <div class="diff add">+ * no<span class="marked">t the default value.</span></div> <div class="diff ctx"> */</div> <div class="diff ctx"> if (tbinfo->attstattarget[j] >= 0)</div> <div class="diff ctx"> appendPQExpBuffer(q, "ALTER %sTABLE ONLY %s ALTER COLUMN %s SET STATISTICS %d;\n",</div> </div> <div class="patch" id="patch12"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=a94dcdc271300d38862760ac862245bd928edad8">a/src/include/catalog/catversion.h</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=460d80ac97e8b737b1d612aa7403b2aaf7cb2114;hb=4f622503d">b/src/include/catalog/catversion.h</a></div> <div class="diff extended_header"> index a94dcdc271300d38862760ac862245bd928edad8..460d80ac97e8b737b1d612aa7403b2aaf7cb2114 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=a94dcdc271300d38862760ac862245bd928edad8">src/include/catalog/catversion.h</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=460d80ac97e8b737b1d612aa7403b2aaf7cb2114;hb=4f622503d">src/include/catalog/catversion.h</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=a94dcdc271300d38862760ac862245bd928edad8#l57">-57,6</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/catversion.h;h=460d80ac97e8b737b1d612aa7403b2aaf7cb2114;hb=4f622503d#l57">+57,6</a> @@</span><span class="section"></span></div> <div class="diff ctx"> */</div> <div class="diff ctx"> </div> <div class="diff ctx"> /* yyyymmddN */</div> <div class="diff rem">-#define CATALOG_VERSION_NO 2024011<span class="marked">1</span>1</div> <div class="diff add">+#define CATALOG_VERSION_NO 2024011<span class="marked">3</span>1</div> <div class="diff ctx"> </div> <div class="diff ctx"> #endif</div> </div> <div class="patch" id="patch13"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=7f4d308e8ddfdd11dc957503a27f5ac8a2ae441c">a/src/include/catalog/pg_attribute.h</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=e2aadb941413d6a797ead54c2dfcb380324de5ee;hb=4f622503d">b/src/include/catalog/pg_attribute.h</a></div> <div class="diff extended_header"> index 7f4d308e8ddfdd11dc957503a27f5ac8a2ae441c..e2aadb941413d6a797ead54c2dfcb380324de5ee 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=7f4d308e8ddfdd11dc957503a27f5ac8a2ae441c">src/include/catalog/pg_attribute.h</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=e2aadb941413d6a797ead54c2dfcb380324de5ee;hb=4f622503d">src/include/catalog/pg_attribute.h</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=7f4d308e8ddfdd11dc957503a27f5ac8a2ae441c#l158">-158,22</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_attribute.h;h=e2aadb941413d6a797ead54c2dfcb380324de5ee;hb=4f622503d#l158">+158,22</a> @@</span><span class="section"> CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75,</span></div> <div class="diff ctx"> /* Number of times inherited from direct parent relation(s) */</div> <div class="diff ctx"> int16 attinhcount BKI_DEFAULT(0);</div> <div class="diff ctx"> </div> <div class="diff add">+ /* attribute's collation, if any */</div> <div class="diff add">+ Oid attcollation BKI_LOOKUP_OPT(pg_collation);</div> <div class="diff add">+</div> <div class="diff add">+#ifdef CATALOG_VARLEN /* variable-length/nullable fields start here */</div> <div class="diff add">+ /* NOTE: The following fields are not present in tuple descriptors. */</div> <div class="diff add">+</div> <div class="diff ctx"> /*</div> <div class="diff ctx"> * attstattarget is the target number of statistics datapoints to collect</div> <div class="diff ctx"> * during VACUUM ANALYZE of this column. A zero here indicates that we do</div> <div class="diff rem">- * not wish to collect any stats about this column. A <span class="marked">"-1" here indicates</span></div> <div class="diff rem">- * <span class="marked">that no value has been explicitly set for this column, so ANALYZE</span></div> <div class="diff rem">- * should use the default setting.</div> <div class="diff add">+ * not wish to collect any stats about this column. A <span class="marked">null value here</span></div> <div class="diff add">+ * <span class="marked">indicates that no value has been explicitly set for this column, so</span></div> <div class="diff add">+ * <span class="marked">ANALYZE </span>should use the default setting.</div> <div class="diff ctx"> *</div> <div class="diff ctx"> * int16 is sufficient for the current max value (MAX_STATISTICS_TARGET).</div> <div class="diff ctx"> */</div> <div class="diff rem">- int16 attstattarget BKI_DEFAULT(-1);</div> <div class="diff rem">-</div> <div class="diff rem">- /* attribute's collation, if any */</div> <div class="diff rem">- Oid attcollation BKI_LOOKUP_OPT(pg_collation);</div> <div class="diff rem">-</div> <div class="diff rem">-#ifdef CATALOG_VARLEN /* variable-length fields start here */</div> <div class="diff rem">- /* NOTE: The following fields are not present in tuple descriptors. */</div> <div class="diff add">+ int16 attstattarget BKI_DEFAULT(_null_) BKI_FORCE_NULL;</div> <div class="diff ctx"> </div> <div class="diff ctx"> /* Column-level access permissions */</div> <div class="diff ctx"> aclitem attacl[1] BKI_DEFAULT(_null_);</div> </div> <div class="patch" id="patch14"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=5cacefc7670ebe91cd86effe012ef10bf6b858c6">a/src/include/commands/vacuum.h</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=7f623b37fdc9b968b6cda144c29916c2214ce9e9;hb=4f622503d">b/src/include/commands/vacuum.h</a></div> <div class="diff extended_header"> index 5cacefc7670ebe91cd86effe012ef10bf6b858c6..7f623b37fdc9b968b6cda144c29916c2214ce9e9 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=5cacefc7670ebe91cd86effe012ef10bf6b858c6">src/include/commands/vacuum.h</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=7f623b37fdc9b968b6cda144c29916c2214ce9e9;hb=4f622503d">src/include/commands/vacuum.h</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=5cacefc7670ebe91cd86effe012ef10bf6b858c6#l121">-121,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/commands/vacuum.h;h=7f623b37fdc9b968b6cda144c29916c2214ce9e9;hb=4f622503d#l121">+121,7</a> @@</span><span class="section"> typedef struct VacAttrStats</span></div> <div class="diff ctx"> * than the underlying column/expression. Therefore, use these fields for</div> <div class="diff ctx"> * information about the datatype being fed to the typanalyze function.</div> <div class="diff ctx"> */</div> <div class="diff rem">- int attstattarget;</div> <div class="diff add">+ int attstattarget;<span class="marked"> /* -1 to use default */</span></div> <div class="diff ctx"> Oid attrtypid; /* type of data being analyzed */</div> <div class="diff ctx"> int32 attrtypmod; /* typmod of data being analyzed */</div> <div class="diff ctx"> Form_pg_type attrtype; /* copy of pg_type row for attrtypid */</div> </div> <div class="patch" id="patch15"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=be9ed70e8413297f9e6744ac64ad8872db9cd81a">a/src/include/utils/lsyscache.h</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=e4a200b00ec9c15030cdadee53c25a74dacb79bf;hb=4f622503d">b/src/include/utils/lsyscache.h</a></div> <div class="diff extended_header"> index be9ed70e8413297f9e6744ac64ad8872db9cd81a..e4a200b00ec9c15030cdadee53c25a74dacb79bf 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=be9ed70e8413297f9e6744ac64ad8872db9cd81a">src/include/utils/lsyscache.h</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=e4a200b00ec9c15030cdadee53c25a74dacb79bf;hb=4f622503d">src/include/utils/lsyscache.h</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=be9ed70e8413297f9e6744ac64ad8872db9cd81a#l90">-90,7</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/include/utils/lsyscache.h;h=e4a200b00ec9c15030cdadee53c25a74dacb79bf;hb=4f622503d#l90">+90,6</a> @@</span><span class="section"> extern Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype,</span></div> <div class="diff ctx"> int16 procnum);</div> <div class="diff ctx"> extern char *get_attname(Oid relid, AttrNumber attnum, bool missing_ok);</div> <div class="diff ctx"> extern AttrNumber get_attnum(Oid relid, const char *attname);</div> <div class="diff rem">-extern int get_attstattarget(Oid relid, AttrNumber attnum);</div> <div class="diff ctx"> extern char get_attgenerated(Oid relid, AttrNumber attnum);</div> <div class="diff ctx"> extern Oid get_atttype(Oid relid, AttrNumber attnum);</div> <div class="diff ctx"> extern void get_atttypetypmodcoll(Oid relid, AttrNumber attnum,</div> </div> <div class="patch" id="patch16"> <div class="diff header">diff --git <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=446cfa678b7c1a5c2c4eee773be5cb0061506303">a/src/test/regress/expected/create_index.out</a> <a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=79fa117cb54d3674aeda6749d8820d4dc66bb2ed;hb=4f622503d">b/src/test/regress/expected/create_index.out</a></div> <div class="diff extended_header"> index 446cfa678b7c1a5c2c4eee773be5cb0061506303..79fa117cb54d3674aeda6749d8820d4dc66bb2ed 100644<span class="info"> (file)</span><br/> </div> <div class="diff from_file">--- a/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=446cfa678b7c1a5c2c4eee773be5cb0061506303">src/test/regress/expected/create_index.out</a></div> <div class="diff to_file">+++ b/<a class="path" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=79fa117cb54d3674aeda6749d8820d4dc66bb2ed;hb=4f622503d">src/test/regress/expected/create_index.out</a></div> <div class="diff chunk_header"><span class="chunk_info">@@ <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=446cfa678b7c1a5c2c4eee773be5cb0061506303#l2707">-2707,8</a> <a class="list" href="/gitweb/?p=postgresql.git;a=blob;f=src/test/regress/expected/create_index.out;h=79fa117cb54d3674aeda6749d8820d4dc66bb2ed;hb=4f622503d#l2707">+2707,8</a> @@</span><span class="section"> SELECT attrelid::regclass, attnum, attstattarget</span></div> <div class="diff ctx"> attrelid | attnum | attstattarget </div> <div class="diff ctx"> ---------------------------+--------+---------------</div> <div class="diff ctx"> concur_exprs_index_expr | 1 | 100</div> <div class="diff rem">- concur_exprs_index_pred | 1 | <span class="marked">-1</span></div> <div class="diff rem">- concur_exprs_index_pred_2 | 1 | <span class="marked">-1</span></div> <div class="diff add">+ concur_exprs_index_pred | 1 | <span class="marked"> </span></div> <div class="diff add">+ concur_exprs_index_pred_2 | 1 | <span class="marked"> </span></div> <div class="diff ctx"> (3 rows)</div> <div class="diff ctx"> </div> <div class="diff ctx"> DROP TABLE concur_exprs_tab;</div> </div> </div> </div> <div class="page_footer"> <div class="page_footer_text">This is the main PostgreSQL git repository.</div> <a class="rss_logo" href="/gitweb/?p=postgresql.git;a=rss" title="log RSS feed">RSS</a> <a class="rss_logo" href="/gitweb/?p=postgresql.git;a=atom" title="log Atom feed">Atom</a> </div> <script type="text/javascript" src="static/gitweb.js"></script> <script type="text/javascript"> window.onload = function () { var tz_cookie = { name: 'gitweb_tz', expires: 14, path: '/' }; onloadTZSetup('local', tz_cookie, 'datetime'); }; </script> </body> </html>