forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
53 lines
8.2 KiB
HTML
53 lines
8.2 KiB
HTML
<a name="EN-US_TOPIC_0000001188589022"></a><a name="EN-US_TOPIC_0000001188589022"></a>
|
|
|
|
<h1 class="topictitle1">Value Storage</h1>
|
|
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001188589022__s02087f00db9e48268d9fd809bd3fb242"><h4 class="sectiontitle"><strong id="EN-US_TOPIC_0000001188589022__b8423527069344">Value Storage Type Resolution</strong></h4><ol id="EN-US_TOPIC_0000001188589022__ofcc871d4c86c4745ae63f2076202966f"><li id="EN-US_TOPIC_0000001188589022__le3afdc7aa94f4030a5ead55a448db9c0">Search for an exact match with the target column.</li><li id="EN-US_TOPIC_0000001188589022__l2e31496b148948aa9cf9d8cac1a899bc">Try to convert the expression to the target type. This will succeed if there is a registered cast between the two types. If the expression is an unknown-type literal, the content of the literal string will be fed to the input conversion routine for the target type.</li><li id="EN-US_TOPIC_0000001188589022__lfc673af29bc34c549be2f69ce6315389">Check whether there is a sizing cast for the target type. A sizing cast is a cast from that type to itself. If one is found in the <strong id="EN-US_TOPIC_0000001188589022__b842352706968">pg_cast</strong> catalog, apply it to the expression before storing into the destination column. The implementation function for such a cast always takes an extra parameter of type <strong id="EN-US_TOPIC_0000001188589022__b8423527069640">integer</strong>. The parameter receives the destination column's <strong id="EN-US_TOPIC_0000001188589022__b8423527069655">atttypmod</strong> value (typically its declared length, although the interpretation of <strong id="EN-US_TOPIC_0000001188589022__b842352706976">atttypmod</strong> varies for different data types), and may take a third <span id="EN-US_TOPIC_0000001188589022__text1815515211281">boolean</span> parameter that says whether the cast is explicit or implicit. The cast function is responsible for applying any length-dependent semantics such as size checking or truncation.</li></ol>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001188589022__sbede71f3c5c047a6854de6935e9905a5"><h4 class="sectiontitle">Examples</h4><p id="EN-US_TOPIC_0000001188589022__a1e86b3ed4be445e795bf84311d6b60a2">Use the <strong id="EN-US_TOPIC_0000001188589022__b84235270691323">character</strong> storage type conversion as an example. For a target column declared as <strong id="EN-US_TOPIC_0000001188589022__b8423527069910">character(20)</strong> the following statement shows that the stored value is sized correctly:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188589022__en-us_topic_0000001080432521_sbb2598b72d9942e3ad0f88614d7130e1"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">x1</span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">customer_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">customer_id</span><span class="w"> </span><span class="nb">char</span><span class="p">(</span><span class="mi">20</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">first_name</span><span class="w"> </span><span class="nb">char</span><span class="p">(</span><span class="mi">6</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">last_name</span><span class="w"> </span><span class="nb">char</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">with</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">,</span><span class="n">compression</span><span class="o">=</span><span class="n">middle</span><span class="p">)</span>
|
|
<span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="w"> </span><span class="p">(</span><span class="n">last_name</span><span class="p">);</span>
|
|
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">x1</span><span class="p">(</span><span class="n">customer_sk</span><span class="p">,</span><span class="w"> </span><span class="n">customer_id</span><span class="p">,</span><span class="w"> </span><span class="n">first_name</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">3769</span><span class="p">,</span><span class="w"> </span><span class="s1">'abcdef'</span><span class="p">,</span><span class="w"> </span><span class="s1">'Grace'</span><span class="p">);</span>
|
|
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="n">customer_id</span><span class="p">,</span><span class="w"> </span><span class="k">octet_length</span><span class="p">(</span><span class="n">customer_id</span><span class="p">)</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">x1</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">customer_id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">octet_length</span><span class="w"> </span>
|
|
<span class="c1">----------------------+--------------</span>
|
|
<span class="w"> </span><span class="n">abcdef</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">20</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="note" id="EN-US_TOPIC_0000001188589022__n82ea9e712a4c44bc9db4431da6aa17db"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001188589022__acb95626ef5844b42bd79e8c3a6b30d89">What has really happened here is that the two unknown literals are resolved to <strong id="EN-US_TOPIC_0000001188589022__b84235270691111">text</strong> by default, allowing the <strong id="EN-US_TOPIC_0000001188589022__b8423527069947">||</strong> operator to be resolved as <strong id="EN-US_TOPIC_0000001188589022__b84235270691118">text</strong> concatenation. Then the <strong id="EN-US_TOPIC_0000001188589022__b8423527069112">text</strong> result of the operator is converted to <strong id="EN-US_TOPIC_0000001188589022__b84235270691056">bpchar</strong> ("blank-padded char", the internal name of the <strong id="EN-US_TOPIC_0000001188589022__b84235270691128">character</strong> data type) to match the target column type. Since the conversion from <strong id="EN-US_TOPIC_0000001188589022__b84235270691139">text</strong> to <strong id="EN-US_TOPIC_0000001188589022__b84235270691144">bpchar</strong> is binary-coercible, this conversion does not insert any real function call. Finally, the sizing function <strong id="EN-US_TOPIC_0000001188589022__b84235270691217">bpchar(bpchar, integer, <span id="EN-US_TOPIC_0000001188589022__text148455611286">boolean</span>)</strong> is found in the system catalog and used for the operator's result and the stored column length. This type-specific function performs the required length check and addition of padding spaces.</p>
|
|
</div></div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_06_0075.html">Type Conversion</a></div>
|
|
</div>
|
|
</div>
|
|
|