Skip to content

Commit 1939058

Browse files
author
chegong18
committed
update trigger.sgml -200704
——row358,调英为: commandINSERTcommand and commandUPDATEcommand operations only, the trigger ——row367,调翻为: 一个行级<literal>INSTEAD OF</literal>触发器可以返回<symbol>NULL</symbol>来指示它没有修改任何来自于视图底层基表的数据,也可以返回被传入的视图行(<command>INSERT</command>和<command>UPDATE</command>操作的<varname>NEW</varname>行,或者<command>DELETE</command>操作的<varname>OLD</varname>行)。一个非空返回值被用于标志触发器在视图中执行了必须的数据修改。这将会导致被命令修改的行计数被增加。仅对于<command>INSERT</command>和<command>UPDATE</command>操作,触发器可能会在返回<varname>NEW</varname>行之前对其进行修改。这将会改变<command>INSERT RETURNING</command>或<command>UPDATE RETURNING</command>返回的数据,并在视图无法正确地显示提供给它的相同数据时有用。 ——row380至406,增英和翻为: <!--==========================orignal english content========================== <para> Some considerations apply for generated columns.<indexterm><primary>generated column</primary><secondary>in triggers</secondary></indexterm> Stored generated columns are computed after <literal>BEFORE</literal> triggers and before <literal>AFTER</literal> triggers. Therefore, the generated value can be inspected in <literal>AFTER</literal> triggers. In <literal>BEFORE</literal> triggers, the <literal>OLD</literal> row contains the old generated value, as one would expect, but the <literal>NEW</literal> row does not yet contain the new generated value and should not be accessed. In the C language interface, the content of the column is undefined at this point; a higher-level programming language should prevent access to a stored generated column in the <literal>NEW</literal> row in a <literal>BEFORE</literal> trigger. Changes to the value of a generated column in a <literal>BEFORE</literal> trigger are ignored and will be overwritten. </para> ____________________________________________________________________________--> <para> 一些情况适用于生成的列。 <indexterm><primary>generated column</primary><secondary>in triggers</secondary></indexterm> 存储生成的列在<literal>BEFORE</literal> 触发器之后和 <literal>AFTER</literal> 触发器之前计算. 因此,生成的值可以在<literal>AFTER</literal>触发器中检查。 在<literal>BEFORE</literal>触发器中,<literal>OLD</literal>行包含旧的生成的值,正如人们所期待的,但 <literal>NEW</literal> 行尚未包含新的生成值并且不应访问。 在C语言界面中,此时列的内容还没有被定义;在<literal>BEFORE</literal>触发器中,高级别编程语言应阻止访问<literal>NEW</literal>行中存储生成的列,。 在<literal>BEFORE</literal>触发器中更改到生成列的值将被忽略并覆盖。 </para> ——row789至790,调英为: TupleTableSlot *tg_trigslot; TupleTableSlot *tg_newslot; ——row1050至1051,调翻为: TupleTableSlot *tg_trigslot; TupleTableSlot *tg_newslot; ——row992至996,调英为: <term><structfield>tg_trigslot</structfield></term> <listitem> <para> The slot containing <structfield>tg_trigtuple</structfield>, or a <symbol>NULL</symbol> pointer if there is no such tuple. ——row1225至1228,调翻为: <term><structfield>tg_trigtuplebuf</structfield></term> <listitem> <para> 包含<structfield>tg_trigtuple</structfield>的插槽。或者一个<symbol>NULL</symbol>指针,如果没有这样的元组的话。 ——row1002至1006,调英为: <term><structfield>tg_newslot</structfield></term> <listitem> <para> The slot containing <structfield>tg_newtuple</structfield>, or a <symbol>NULL</symbol> pointer if there is no such tuple. ——row1234至1237,调翻为: <term><structfield>tg_newtuplebuf</structfield></term> <listitem> <para> 包含<structfield>tg_trigtuple</structfield>的插槽。或者一个<symbol>NULL</symbol>指针,如果没有这样的元组的话。
1 parent 7f544ae commit 1939058

File tree

1 file changed

+43
-15
lines changed

1 file changed

+43
-15
lines changed

postgresql/doc/src/sgml/trigger.sgml

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ ____________________________________________________________________________-->
202202
<para>
203203
一个以继承或者分区层次中父表为目标的语句不会导致受影响的子表的语句级触发器被引发,只有父表的语句级触发器会被引发。不过,受影响的子表的行级触发器将被引发。
204204
</para>
205-
205+
206206
<!--==========================orignal english content==========================
207207
<para>
208208
If an <command>INSERT</command> contains an <literal>ON CONFLICT
@@ -355,7 +355,7 @@ ____________________________________________________________________________-->
355355
used to signal that the trigger performed the necessary data
356356
modifications in the view. This will cause the count of the number
357357
of rows affected by the command to be incremented. For
358-
<command>INSERT</command> and <command>UPDATE</command> operations, the trigger
358+
<command>INSERT</command> and <command>UPDATE</command> operations only, the trigger
359359
may modify the <varname>NEW</varname> row before returning it. This will
360360
change the data returned by
361361
<command>INSERT RETURNING</command> or <command>UPDATE RETURNING</command>,
@@ -364,7 +364,7 @@ ____________________________________________________________________________-->
364364
</para>
365365
____________________________________________________________________________-->
366366
<para>
367-
一个行级<literal>INSTEAD OF</literal>触发器可以返回<symbol>NULL</symbol>来指示它没有修改任何来自于视图底层基表的数据,也可以返回被传入的视图行(<command>INSERT</command>和<command>UPDATE</command>操作的<varname>NEW</varname>行,或者<command>DELETE</command>操作的<varname>OLD</varname>行)。一个非空返回值被用于标志触发器在视图中执行了必须的数据修改。这将会导致被命令修改的行计数被增加。对于<command>INSERT</command>和<command>UPDATE</command>操作,触发器可能会在返回<varname>NEW</varname>行之前对其进行修改。这将会改变<command>INSERT RETURNING</command>或<command>UPDATE RETURNING</command>返回的数据,并在视图无法正确地显示提供给它的相同数据时有用。
367+
一个行级<literal>INSTEAD OF</literal>触发器可以返回<symbol>NULL</symbol>来指示它没有修改任何来自于视图底层基表的数据,也可以返回被传入的视图行(<command>INSERT</command>和<command>UPDATE</command>操作的<varname>NEW</varname>行,或者<command>DELETE</command>操作的<varname>OLD</varname>行)。一个非空返回值被用于标志触发器在视图中执行了必须的数据修改。这将会导致被命令修改的行计数被增加。仅对于<command>INSERT</command>和<command>UPDATE</command>操作,触发器可能会在返回<varname>NEW</varname>行之前对其进行修改。这将会改变<command>INSERT RETURNING</command>或<command>UPDATE RETURNING</command>返回的数据,并在视图无法正确地显示提供给它的相同数据时有用。
368368
</para>
369369

370370
<!--==========================orignal english content==========================
@@ -377,6 +377,34 @@ ____________________________________________________________________________-->
377377
对于在一个操作之后触发的行级触发器,返回值会被忽略,因此它们可以返回<symbol>NULL</symbol>。
378378
</para>
379379

380+
<!--==========================orignal english content==========================
381+
<para>
382+
Some considerations apply for generated
383+
columns.<indexterm><primary>generated column</primary><secondary>in
384+
triggers</secondary></indexterm> Stored generated columns are computed after
385+
<literal>BEFORE</literal> triggers and before <literal>AFTER</literal>
386+
triggers. Therefore, the generated value can be inspected in
387+
<literal>AFTER</literal> triggers. In <literal>BEFORE</literal> triggers,
388+
the <literal>OLD</literal> row contains the old generated value, as one
389+
would expect, but the <literal>NEW</literal> row does not yet contain the
390+
new generated value and should not be accessed. In the C language
391+
interface, the content of the column is undefined at this point; a
392+
higher-level programming language should prevent access to a stored
393+
generated column in the <literal>NEW</literal> row in a
394+
<literal>BEFORE</literal> trigger. Changes to the value of a generated
395+
column in a <literal>BEFORE</literal> trigger are ignored and will be
396+
overwritten.
397+
</para>
398+
____________________________________________________________________________-->
399+
<para>
400+
一些情况适用于生成的列。
401+
<indexterm><primary>generated column</primary><secondary>in triggers</secondary></indexterm> 存储生成的列在<literal>BEFORE</literal> 触发器之后和 <literal>AFTER</literal> 触发器之前计算.
402+
因此,生成的值可以在<literal>AFTER</literal>触发器中检查。
403+
在<literal>BEFORE</literal>触发器中,<literal>OLD</literal>行包含旧的生成的值,正如人们所期待的,但 <literal>NEW</literal> 行尚未包含新的生成值并且不应访问。
404+
在C语言界面中,此时列的内容还没有被定义;在<literal>BEFORE</literal>触发器中,高级别编程语言应阻止访问<literal>NEW</literal>行中存储生成的列,。
405+
在<literal>BEFORE</literal>触发器中更改到生成列的值将被忽略并覆盖。
406+
</para>
407+
380408
<!--==========================orignal english content==========================
381409
<para>
382410
If more than one trigger is defined for the same event on the same
@@ -758,8 +786,8 @@ typedef struct TriggerData
758786
HeapTuple tg_trigtuple;
759787
HeapTuple tg_newtuple;
760788
Trigger *tg_trigger;
761-
Buffer tg_trigtuplebuf;
762-
Buffer tg_newtuplebuf;
789+
TupleTableSlot *tg_trigslot;
790+
TupleTableSlot *tg_newslot;
763791
Tuplestorestate *tg_oldtable;
764792
Tuplestorestate *tg_newtable;
765793
} TriggerData;
@@ -961,21 +989,21 @@ typedef struct Trigger
961989
</varlistentry>
962990

963991
<varlistentry>
964-
<term><structfield>tg_trigtuplebuf</structfield></term>
992+
<term><structfield>tg_trigslot</structfield></term>
965993
<listitem>
966994
<para>
967-
The buffer containing <structfield>tg_trigtuple</structfield>, or <symbol>InvalidBuffer</symbol> if there
968-
is no such tuple or it is not stored in a disk buffer.
995+
The slot containing <structfield>tg_trigtuple</structfield>,
996+
or a <symbol>NULL</symbol> pointer if there is no such tuple.
969997
</para>
970998
</listitem>
971999
</varlistentry>
9721000

9731001
<varlistentry>
974-
<term><structfield>tg_newtuplebuf</structfield></term>
1002+
<term><structfield>tg_newslot</structfield></term>
9751003
<listitem>
9761004
<para>
977-
The buffer containing <structfield>tg_newtuple</structfield>, or <symbol>InvalidBuffer</symbol> if there
978-
is no such tuple or it is not stored in a disk buffer.
1005+
The slot containing <structfield>tg_newtuple</structfield>,
1006+
or a <symbol>NULL</symbol> pointer if there is no such tuple.
9791007
</para>
9801008
</listitem>
9811009
</varlistentry>
@@ -1019,8 +1047,8 @@ typedef struct TriggerData
10191047
HeapTuple tg_trigtuple;
10201048
HeapTuple tg_newtuple;
10211049
Trigger *tg_trigger;
1022-
Buffer tg_trigtuplebuf;
1023-
Buffer tg_newtuplebuf;
1050+
TupleTableSlot *tg_trigslot;
1051+
TupleTableSlot *tg_newslot;
10241052
Tuplestorestate *tg_oldtable;
10251053
Tuplestorestate *tg_newtable;
10261054
} TriggerData;
@@ -1197,7 +1225,7 @@ typedef struct Trigger
11971225
<term><structfield>tg_trigtuplebuf</structfield></term>
11981226
<listitem>
11991227
<para>
1200-
包含<structfield>tg_trigtuple</structfield>的缓冲区。如果没有那个元组或者它没有被存储在一个磁盘缓冲区中,则为<symbol>InvalidBuffer</symbol>。
1228+
包含<structfield>tg_trigtuple</structfield>的插槽。或者一个<symbol>NULL</symbol>指针,如果没有这样的元组的话
12011229
</para>
12021230
</listitem>
12031231
</varlistentry>
@@ -1206,7 +1234,7 @@ typedef struct Trigger
12061234
<term><structfield>tg_newtuplebuf</structfield></term>
12071235
<listitem>
12081236
<para>
1209-
包含<structfield>tg_newtuple</structfield>的缓冲区。如果没有那个元组或者它没有被存储在一个磁盘缓冲区中,则为<symbol>InvalidBuffer</symbol>。
1237+
包含<structfield>tg_trigtuple</structfield>的插槽。或者一个<symbol>NULL</symbol>指针,如果没有这样的元组的话
12101238
</para>
12111239
</listitem>
12121240
</varlistentry>

0 commit comments

Comments
 (0)