mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	doc: clarify the behavior of identically-named savepoints
Original patch by David G. Johnston. Reported-by: David G. Johnston Discussion: https://postgr.es/m/CAKFQuwYQCxSSuSL18skCWG8QHFswOJ3hjovHsOZUE346i4OpVQ@mail.gmail.com Backpatch-through: 10
This commit is contained in:
		
							parent
							
								
									4f63f6aae0
								
							
						
					
					
						commit
						ec1fe23afa
					
				| @ -82,8 +82,9 @@ RELEASE [ SAVEPOINT ] <replaceable>savepoint_name</replaceable> | ||||
|   </para> | ||||
| 
 | ||||
|   <para> | ||||
|    If multiple savepoints have the same name, only the one that was most | ||||
|    recently defined is released. | ||||
|    If multiple savepoints have the same name, only the most recently defined | ||||
|    unreleased one is released.  Repeated commands will release progressively | ||||
|    older savepoints. | ||||
|   </para> | ||||
| 
 | ||||
|  </refsect1> | ||||
|  | ||||
| @ -53,7 +53,9 @@ SAVEPOINT <replaceable>savepoint_name</replaceable> | ||||
|     <term><replaceable>savepoint_name</replaceable></term> | ||||
|     <listitem> | ||||
|      <para> | ||||
|       The name to give to the new savepoint. | ||||
|       The name to give to the new savepoint.  If savepoints with the | ||||
|       same name already exist, they will be inaccessible until newer | ||||
|       identically-named savepoints are released. | ||||
|      </para> | ||||
|     </listitem> | ||||
|    </varlistentry> | ||||
| @ -106,6 +108,32 @@ COMMIT; | ||||
| </programlisting> | ||||
|    The above transaction will insert both 3 and 4. | ||||
|   </para> | ||||
| 
 | ||||
|   <para> | ||||
|   To use a single savepoint name: | ||||
| <programlisting> | ||||
| BEGIN; | ||||
|     INSERT INTO table1 VALUES (1); | ||||
|     SAVEPOINT my_savepoint; | ||||
|     INSERT INTO table1 VALUES (2); | ||||
|     SAVEPOINT my_savepoint; | ||||
|     INSERT INTO table1 VALUES (3); | ||||
| 
 | ||||
|     -- rollback to the second savepoint | ||||
|     ROLLBACK TO SAVEPOINT my_savepoint; | ||||
|     SELECT * FROM table1;               -- shows rows 1 and 2 | ||||
| 
 | ||||
|     -- release the second savepoint | ||||
|     RELEASE SAVEPOINT my_savepoint; | ||||
| 
 | ||||
|     -- rollback to the first savepoint | ||||
|     ROLLBACK TO SAVEPOINT my_savepoint; | ||||
|     SELECT * FROM table1;               -- shows only row 1 | ||||
| COMMIT; | ||||
| </programlisting> | ||||
|   The above transaction shows row 3 being rolled back first, then row 2. | ||||
|   </para> | ||||
| 
 | ||||
|  </refsect1> | ||||
| 
 | ||||
|  <refsect1> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user