mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Improve partitioning example, per Itagaki Takahiro.
This commit is contained in:
		
							parent
							
								
									531f58688a
								
							
						
					
					
						commit
						57da4cca27
					
				| @ -1,4 +1,4 @@ | |||||||
| <!-- $PostgreSQL: pgsql/doc/src/sgml/ddl.sgml,v 1.78 2007/12/02 19:20:32 tgl Exp $ --> | <!-- $PostgreSQL: pgsql/doc/src/sgml/ddl.sgml,v 1.79 2007/12/03 04:59:55 tgl Exp $ --> | ||||||
| 
 | 
 | ||||||
| <chapter id="ddl"> | <chapter id="ddl"> | ||||||
|  <title>Data Definition</title> |  <title>Data Definition</title> | ||||||
| @ -2466,8 +2466,9 @@ CREATE TABLE measurement_y2008m01 ( ) INHERITS (measurement); | |||||||
| 
 | 
 | ||||||
|       <listitem> |       <listitem> | ||||||
|        <para> |        <para> | ||||||
|         We must add non-overlapping table constraints, so that our |         We must provide non-overlapping table constraints.  Rather than | ||||||
|         table creation script becomes: |         just creating the partition tables as above, the table creation | ||||||
|  |         script should really be: | ||||||
| 
 | 
 | ||||||
|  <programlisting> |  <programlisting> | ||||||
| CREATE TABLE measurement_y2006m02 ( | CREATE TABLE measurement_y2006m02 ( | ||||||
| @ -2550,12 +2551,12 @@ CREATE TRIGGER insert_measurement_trigger | |||||||
| CREATE OR REPLACE FUNCTION measurement_insert_trigger() | CREATE OR REPLACE FUNCTION measurement_insert_trigger() | ||||||
| RETURNS TRIGGER AS $$ | RETURNS TRIGGER AS $$ | ||||||
| BEGIN | BEGIN | ||||||
|     IF ( logdate >= DATE '2006-02-01' AND logdate < DATE '2006-03-01' ) THEN |     IF ( NEW.logdate >= DATE '2006-02-01' AND NEW.logdate < DATE '2006-03-01' ) THEN | ||||||
|         INSERT INTO measurement_y2006m02 VALUES (NEW.*); |         INSERT INTO measurement_y2006m02 VALUES (NEW.*); | ||||||
|     ELSIF ( logdate >= DATE '2006-03-01' AND logdate < DATE '2006-04-01' ) THEN |     ELSIF ( NEW.logdate >= DATE '2006-03-01' AND NEW.logdate < DATE '2006-04-01' ) THEN | ||||||
|         INSERT INTO measurement_y2006m03 VALUES (NEW.*); |         INSERT INTO measurement_y2006m03 VALUES (NEW.*); | ||||||
|     ... |     ... | ||||||
|     ELSIF ( logdate >= DATE '2008-01-01' AND logdate < DATE '2008-02-01' ) THEN |     ELSIF ( NEW.logdate >= DATE '2008-01-01' AND NEW.logdate < DATE '2008-02-01' ) THEN | ||||||
|         INSERT INTO measurement_y2008m01 VALUES (NEW.*); |         INSERT INTO measurement_y2008m01 VALUES (NEW.*); | ||||||
|     ELSE |     ELSE | ||||||
|         RAISE EXCEPTION 'Date out of range.  Fix the measurement_insert_trigger() function!'; |         RAISE EXCEPTION 'Date out of range.  Fix the measurement_insert_trigger() function!'; | ||||||
| @ -2576,6 +2577,15 @@ LANGUAGE plpgsql; | |||||||
|         it doesn't need to be updated as often, since branches can be |         it doesn't need to be updated as often, since branches can be | ||||||
|         added in advance of being needed. |         added in advance of being needed. | ||||||
|        </para> |        </para> | ||||||
|  | 
 | ||||||
|  |        <note> | ||||||
|  |         <para> | ||||||
|  |          In practice it might be best to check the newest partition first, | ||||||
|  |          if most inserts go into that partition.  For simplicity we have | ||||||
|  |          shown the trigger's tests in the same order as in other parts | ||||||
|  |          of this example. | ||||||
|  |         </para> | ||||||
|  |        </note> | ||||||
|       </listitem> |       </listitem> | ||||||
|      </orderedlist> |      </orderedlist> | ||||||
|     </para> |     </para> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user