doc-exports/docs/dws/dev/dws_04_0244.html
Lu, Huayi e6fa411af0 DWS DEV 830.201 version
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>
2024-05-16 07:24:04 +00:00

197 lines
48 KiB
HTML

<a name="EN-US_TOPIC_0000001188323676"></a><a name="EN-US_TOPIC_0000001188323676"></a>
<h1 class="topictitle1">Creating a Foreign Server</h1>
<div id="body8662426"><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p8060118">This section describes how to create a foreign server that is used to define the information about OBS servers and is invoked by foreign tables. For details about the syntax for creating foreign servers, see CREATE SERVER.</p>
<div class="section" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_section590417587243"><a name="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_section590417587243"></a><a name="en-us_topic_0000001099130938_en-us_topic_0102810708_section590417587243"></a><h4 class="sectiontitle">(Optional) Creating a User and a Database and Granting the User Foreign Table Permissions</h4><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p2010175083414">Common users do not have permissions to create foreign servers and tables. If you want to use a common user to create foreign servers and tables in a customized database, perform the following steps to create a user and a database, and grant the user foreign table permissions. </p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p12921550135117">In the following example, a common user <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b2086253013810">dbuser</strong> and a database <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b686343083810">mydatabase</strong> are created. Then, an administrator is used to grant foreign table permissions to user <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b16863830173815">dbuser</strong>.</p>
<ol id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_ol101931836102615"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_lc91f99c58f704cdaa661d40055b6a4eb"><span>Connect to the default database <strong id="EN-US_TOPIC_0000001188323676__b155841314019"><span id="EN-US_TOPIC_0000001188323676__text91831321465">gaussdb</span></strong> as a database administrator through the database client tool provided by <span id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_ph1692512422530">GaussDB(DWS)</span>.</span><p><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p1328375516319">For example, use the gsql client to connect to the database by running the following command:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen91981036192612"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">gsql</span><span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">gaussdb</span><span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="w"> </span><span class="mi">192</span><span class="p">.</span><span class="mi">168</span><span class="p">.</span><span class="mi">2</span><span class="p">.</span><span class="mi">30</span><span class="w"> </span><span class="o">-</span><span class="n">U</span><span class="w"> </span><span class="n">dbadmin</span><span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="mi">8000</span><span class="w"> </span><span class="o">-</span><span class="n">W</span><span class="w"> </span><span class="n">password</span><span class="w"> </span><span class="o">-</span><span class="n">r</span>
</pre></div></td></tr></table></div>
</div>
</p></li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li202058411867"><span>Create a common user and use it to create a database.</span><p><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p16207441463">Create a user named <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b20925185213417">dbuser</strong> that has the permission to create databases.</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen10208124112612"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">USER</span><span class="w"> </span><span class="n">dbuser</span><span class="w"> </span><span class="k">WITH</span><span class="w"> </span><span class="k">CREATEDB</span><span class="w"> </span><span class="n">PASSWORD</span><span class="w"> </span><span class="s1">'password'</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<div class="p" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p72161941564">Switch to the created user.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen42170411668"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SET</span><span class="w"> </span><span class="k">ROLE</span><span class="w"> </span><span class="n">dbuser</span><span class="w"> </span><span class="n">PASSWORD</span><span class="w"> </span><span class="s1">'password'</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="p" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p02292412618">Run the following command to create the database demo:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen1523074119610"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">DATABASE</span><span class="w"> </span><span class="n">mydatabase</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p7236114114612">Query the database.</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_s95e747b2f26640fa963c87eab9b77b6a"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_database</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p8242741264">The database is successfully created if the returned result contains information about <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_b162421841667">mydatabase</strong>.</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_sd46c3917572546f2a77a370642a6872c"><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></pre></div></td><td class="code"><div><pre><span></span><span class="n">datname</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datdba</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">encoding</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datcollate</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datctype</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datistemplate</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datallowconn</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datconnlimit</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datlastsysoid</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datfrozenxid</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">dattablespace</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datcompatibility</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">datacl</span>
<span class="c1">------------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+---------------+------------------+--------------------------------------</span>
<span class="c1">--------------</span>
<span class="w"> </span><span class="n">template1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14146</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1351</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1663</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ORA</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{</span><span class="o">=</span><span class="k">c</span><span class="o">/</span><span class="n">Ruby</span><span class="p">,</span><span class="n">Ruby</span><span class="o">=</span><span class="n">CTc</span><span class="o">/</span><span class="n">Ruby</span><span class="err">}</span>
<span class="w"> </span><span class="n">template0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14146</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1350</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1663</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ORA</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{</span><span class="o">=</span><span class="k">c</span><span class="o">/</span><span class="n">Ruby</span><span class="p">,</span><span class="n">Ruby</span><span class="o">=</span><span class="n">CTc</span><span class="o">/</span><span class="n">Ruby</span><span class="err">}</span>
<span class="w"> </span><span class="n">gaussdb</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14146</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1352</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1663</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ORA</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{</span><span class="o">=</span><span class="n">Tc</span><span class="o">/</span><span class="n">Ruby</span><span class="p">,</span><span class="n">Ruby</span><span class="o">=</span><span class="n">CTc</span><span class="o">/</span><span class="n">Ruby</span><span class="p">,</span><span class="n">chaojun</span><span class="o">=</span><span class="k">C</span><span class="o">/</span><span class="n">Ruby</span><span class="p">,</span><span class="n">hu</span>
<span class="n">obinru</span><span class="o">=</span><span class="k">C</span><span class="o">/</span><span class="n">Ruby</span><span class="err">}</span>
<span class="w"> </span><span class="n">mydatabase</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">17000</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">C</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14146</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1351</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1663</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ORA</span><span class="w"> </span><span class="o">|</span>
<span class="p">(</span><span class="mi">4</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
</pre></div></td></tr></table></div>
</div>
</p></li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li13857182418276"><span>Grant the permissions for creating foreign servers and using foreign tables to a common user as the administrator.</span><p><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p15329124435216">Connect to the new database as a database administrator through the database client tool provided by <span id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_ph195915358272">GaussDB(DWS)</span>.</p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_a4bfb3f8aae0a416980e919e61dc06aac">You can use the gsql client to run the following command to switch to an administrator user and connect to the new database:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_screen203771722183416"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="err">\</span><span class="k">c</span><span class="w"> </span><span class="n">mydatabase</span><span class="w"> </span><span class="n">dbadmin</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p237719228344">Enter the password of the system administrator as prompted.</p>
<div class="note" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_note1837711224346"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p53775222346">Note that you must use the administrator account to connect to the database where a foreign server is to be created and foreign tables are used; and then grant permissions to the common user.</p>
</div></div>
<div class="p" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p11378122133416">By default, only system administrators can create foreign servers. Common users can create foreign servers only after being authorized. Run the following command to grant the permission:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_screen23781722153412"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">GRANT</span><span class="w"> </span><span class="k">ALL</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="k">SCHEMA</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">dbuser</span><span class="p">;</span>
<span class="k">GRANT</span><span class="w"> </span><span class="k">ALL</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="k">FOREIGN</span><span class="w"> </span><span class="k">DATA</span><span class="w"> </span><span class="n">WRAPPER</span><span class="w"> </span><span class="n">dfs_fdw</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">dbuser</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p9378622173416">where <em id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_i17178637113918">fdw_name</em> can be <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b182145773614">hdfs_fdw</strong> or <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b9683718379">dfs_fdw</strong>, and <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b95190134378">dbuser</strong> is the name of the user who creates SERVER.</p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p637852243412">Run the following command to grant the user the permission to use foreign tables:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_screen53781922203410"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">ALTER</span><span class="w"> </span><span class="k">USER</span><span class="w"> </span><span class="n">dbuser</span><span class="w"> </span><span class="n">USEFT</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p133781522123416">Query for the user.</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_screen19378152283412"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolname</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolsuper</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolinherit</span><span class="p">,</span>
<span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolcreaterole</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolcreatedb</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolcanlogin</span><span class="p">,</span>
<span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolconnlimit</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolvalidbegin</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolvaliduntil</span><span class="p">,</span>
<span class="w"> </span><span class="nb">ARRAY</span><span class="p">(</span><span class="k">SELECT</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">rolname</span>
<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_catalog</span><span class="p">.</span><span class="n">pg_auth_members</span><span class="w"> </span><span class="n">m</span>
<span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">pg_catalog</span><span class="p">.</span><span class="n">pg_roles</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">roleid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">oid</span><span class="p">)</span>
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">m</span><span class="p">.</span><span class="n">member</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">oid</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">memberof</span>
<span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolreplication</span>
<span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolauditadmin</span>
<span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">rolsystemadmin</span>
<span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="p">.</span><span class="n">roluseft</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">pg_catalog</span><span class="p">.</span><span class="n">pg_roles</span><span class="w"> </span><span class="n">r</span>
<span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p1378422123411">The authorization is successful if the <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b1393135994610">dbuser</strong> information in the returned result contains the UseFT permission.</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_s17f698165b0140f5868d49c4dbd048d6"><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></pre></div></td><td class="code"><div><pre><span></span><span class="n">rolname</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolsuper</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolinherit</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolcreaterole</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolcreatedb</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolcanlogin</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolconnlimit</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolvalidbegin</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolvaliduntil</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">memberof</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolreplication</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolauditadmin</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">rolsystemadmin</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">roluseft</span>
<span class="c1">-----------+----------+------------+---------------+-------------+-------------+--------------+---------------+---------------+----------+----------------+---------------+----------------+----------</span>
<span class="w"> </span><span class="n">dbuser</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{}</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span>
<span class="w"> </span><span class="n">lily</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{}</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">f</span>
<span class="w"> </span><span class="n">Ruby</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{}</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">t</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
</p></li></ol>
</div>
<div class="section" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_section1256013310920"><h4 class="sectiontitle">Creating a Foreign Server</h4><ol id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_ol62901748313"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li16757220114119"><span>Use the user who is about to create a foreign server to connect to the corresponding database.</span><p><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p1148151133719">In this example, use common user <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b1466112012472">dbuser</strong> created in <a href="#EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_section590417587243">(Optional) Creating a User and a Database and Granting the User Foreign Table Permissions</a> to connect to <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b16621209476">mydatabase</strong> created by the user. You need to connect to the database through the database client tool provided by <span id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_ph4705943162713">GaussDB(DWS)</span>.</p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p1144871316372">You can use the <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b1471493134720">gsql</strong> client to log in to the database in either of the following ways:</p>
<ul id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_ul93458395536"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li534623955317">If you have logged in to the gsql client, run the following command to switch the database and user:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen7348153914537"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="err">\</span><span class="k">c</span><span class="w"> </span><span class="n">mydatabase</span><span class="w"> </span><span class="n">dbuser</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p1735512399532">Enter the password as prompted.</p>
</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li1355133919531">If you have not logged in to the gsql client or have exited the gsql client by running the <b><span class="cmdname" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_cmdname20356639125315">\q</span></b> command, run the following command to reconnect to it:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen19357193916539"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">gsql</span><span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">mydatabase</span><span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="w"> </span><span class="mi">192</span><span class="p">.</span><span class="mi">168</span><span class="p">.</span><span class="mi">2</span><span class="p">.</span><span class="mi">30</span><span class="w"> </span><span class="o">-</span><span class="n">U</span><span class="w"> </span><span class="n">dbuser</span><span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="mi">8000</span><span class="w"> </span><span class="o">-</span><span class="n">r</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p1136163925313">Enter the password as prompted.</p>
</li></ul>
</p></li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li5290144113112"><span>Create a foreign server.</span><p><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p18966149111018">For details about the syntax for creating foreign servers, see CREATE SERVER.</p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p8991101111566">For example, run the following command to create a foreign server named <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b199631852194114">obs_server</strong>.</p>
<div class="note" id="EN-US_TOPIC_0000001188323676__note126451822545"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001188323676__p4438122443818">// Hard-coded or plaintext AK and SK are risky. For security purposes, encrypt your AK and SK and store them in the configuration file or environment variables.</p>
</div></div>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen11290114183116"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="n">SERVER</span><span class="w"> </span><span class="n">obs_server</span><span class="w"> </span><span class="k">FOREIGN</span><span class="w"> </span><span class="k">DATA</span><span class="w"> </span><span class="n">WRAPPER</span><span class="w"> </span><span class="n">dfs_fdw</span><span class="w"> </span>
<span class="k">OPTIONS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span>
<span class="w"> </span><span class="n">address</span><span class="w"> </span><span class="s1">'obs.xxx.com'</span><span class="w"> </span><span class="p">,</span><span class="w"> </span>
<span class="w"> </span><span class="n">ACCESS_KEY</span><span class="w"> </span><span class="s1">'access_key_value_to_be_replaced'</span><span class="p">,</span><span class="w"> </span>
<span class="w"> </span><span class="n">SECRET_ACCESS_KEY</span><span class="w"> </span><span class="s1">'secret_access_key_value_to_be_replaced'</span><span class="p">,</span><span class="w"> </span>
<span class="w"> </span><span class="n">encrypt</span><span class="w"> </span><span class="s1">'on'</span><span class="p">,</span>
<span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="s1">'obs'</span><span class="w"> </span>
<span class="p">);</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p529094113116">Mandatory parameters are described as follows:</p>
<ul id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_ul72904473112"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li20112247502"><em id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_i49661252114115">Name of the foreign server</em><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p597517818226">You can customize a name.</p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p14825494018">In this example, the name is set to <span class="parmvalue" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_parmvalue1558511113151"><b>obs_server</b></span>.</p>
</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li19490175515519"><strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_b7768715851">FOREIGN DATA WRAPPER</strong><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p183267571517"><em id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_i69281219203914">fdw_name</em> can be <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b1761691314392">hdfs_fdw</strong> or <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b1587815163912">dfs_fdw</strong>, which already exists in the database.</p>
</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li18678132185718"><strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_b7243102620514">OPTIONS parameters</strong><ul id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_ul18824445155713"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li14824174512577"><strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_b1140053612411">address</strong><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p1123843313317">Specifies the endpoint of the OBS service.</p>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_a82d44fe9c5584ce89d8e5e9777ad23e9">Obtain the address as follows:</p>
<ol type="a" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_o9ac5a0bfa5bd4fc9a686a6fbd4c95cd6"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_lfbb2cfdd824e42c9ba2cc13574d890c5">Obtain the OBS path by performing <a href="dws_04_0243.html#EN-US_TOPIC_0000001188482188__en-us_topic_0000001145410931_en-us_topic_0102810712_li12771154711">2</a> in <a href="dws_04_0243.html">Preparing Data on OBS</a>.</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_la8feef705d214c2f99f21d55b272dedf">The OBS path on OBS is <strong id="EN-US_TOPIC_0000001188323676__b218112319587">obs.</strong><em id="EN-US_TOPIC_0000001188323676__i19582101053715">xxx</em>.<em id="EN-US_TOPIC_0000001188323676__i237465618366">xxx</em>.<strong id="EN-US_TOPIC_0000001188323676__b9922155923611">com</strong>, which is the endpoint of OBS.</li></ol>
</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li18937028223528">(Optional) <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_b167574449326">Access keys (AK and SK)</strong><div class="p" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p197391527234"><span id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_ph672014275811">GaussDB(DWS)</span> needs to use the access keys (AK and SK) to access OBS. Therefore, you must obtain the access keys first.<ul id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_ul6570644223536"><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li53154072223523">(Mandatory) <span class="parmname" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_parmname1597315264111"><b>access_key</b></span>: specifies users' AK information.</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li46211726223523">(Mandatory) <span class="parmname" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_parmname14974252114110"><b>secret_access_key</b></span>: specifies users' SK information.</li></ul>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_p18490192944018">For details about how to obtain the access keys, see <a href="dws_04_0183.html">Creating Access Keys (AK and SK)</a>.</p>
</li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li164581429113218"><strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_b119841230341">type</strong><p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p34741157387">Its value is <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b4977135274118">obs</strong>, which indicates that <strong id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_b097715528412">dfs_fdw</strong> connects to OBS.</p>
</li></ul>
</li></ul>
</p></li><li id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_li964811864411"><span>View the foreign server.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen1329004143114"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_foreign_server</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">srvname</span><span class="o">=</span><span class="s1">'obs_server'</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_p182901244318">The server is successfully created if the returned result is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188323676__en-us_topic_0000001099130938_en-us_topic_0102810708_screen1290843319"><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></pre></div></td><td class="code"><div><pre><span></span><span class="w"> </span><span class="n">srvname</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">srvowner</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">srvfdw</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">srvtype</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">srvversion</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">srvacl</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">srvoptions</span>
<span class="c1">------------+----------+--------+---------+------------+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="c1">-----------</span>
<span class="w"> </span><span class="n">obs_server</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">24661</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">13686</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="err">{</span><span class="n">address</span><span class="o">=</span><span class="n">xxx</span><span class="p">.</span><span class="n">xxx</span><span class="p">.</span><span class="n">x</span><span class="p">.</span><span class="n">xxx</span><span class="p">,</span><span class="n">access_key</span><span class="o">=</span><span class="n">xxxxxxxxxxxxxxxxxxxx</span><span class="p">,</span><span class="k">type</span><span class="o">=</span><span class="n">obs</span><span class="p">,</span><span class="n">secret_access_key</span><span class="o">=</span><span class="n">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span><span class="err">}</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>
</p></li></ol>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0155.html">Importing ORC or CarbonData Data from OBS</a></div>
</div>
</div>