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"> | ||||
|  <title>Data Definition</title> | ||||
| @ -2466,8 +2466,9 @@ CREATE TABLE measurement_y2008m01 ( ) INHERITS (measurement); | ||||
| 
 | ||||
|       <listitem> | ||||
|        <para> | ||||
|         We must add non-overlapping table constraints, so that our | ||||
|         table creation script becomes: | ||||
|         We must provide non-overlapping table constraints.  Rather than | ||||
|         just creating the partition tables as above, the table creation | ||||
|         script should really be: | ||||
| 
 | ||||
|  <programlisting> | ||||
| CREATE TABLE measurement_y2006m02 ( | ||||
| @ -2550,12 +2551,12 @@ CREATE TRIGGER insert_measurement_trigger | ||||
| CREATE OR REPLACE FUNCTION measurement_insert_trigger() | ||||
| RETURNS TRIGGER AS $$ | ||||
| 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.*); | ||||
|     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.*); | ||||
|     ... | ||||
|     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.*); | ||||
|     ELSE | ||||
|         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 | ||||
|         added in advance of being needed. | ||||
|        </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> | ||||
|      </orderedlist> | ||||
|     </para> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user