S h a r d i n g w i t h p o s t g r e s _ f d w
Postgres Open 2013 Chicago
Stephen Frost sfrost@snowman.net
Resonate, Inc. • Digital Media • PostgreSQL • Hadoop • techjobs@resonateinsights.com • http://www.resonateinsights.com
S h a r d i n g w i t h p o s t g r e s _ f d w Postgres Open 2013 - - PowerPoint PPT Presentation
S h a r d i n g w i t h p o s t g r e s _ f d w Postgres Open 2013 Chicago Stephen Frost sfrost@snowman.net Resonate, Inc. Digital Media PostgreSQL Hadoop techjobs@resonateinsights.com http://www.resonateinsights.com S t
Postgres Open 2013 Chicago
Stephen Frost sfrost@snowman.net
Resonate, Inc. • Digital Media • PostgreSQL • Hadoop • techjobs@resonateinsights.com • http://www.resonateinsights.com
CREATE FOREIGN SERVER shard01 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'shard01', dbname 'mydb', ...)
CREATE USER MAPPING FOR myrole SERVER shard01 OPTIONS (user 'myrole', password 'abc123')
CREATE FOREIGN TABLE mytable_shard01 ( a int OPTIONS (column_name 'b'), b int OPTIONS (column_name 'a'), ... SERVER shard01 OPTIONS (table_name 'mytable');
remote column
rows are requested during query execution
transaction ends
local transaction completes
C R E A T E F O R E I G N T A B L E w o r k f l o w . j o b s _ s h a r d 1 ( w o r k f l o w _ n a m e t e x t , n a m e t e x t , s t a t e t e x t ) S E R V E R s h a r d 1 O P T I O N S ( s c h e m a _ n a m e ' w o r k f l o w ' , t a b l e _ n a m e ' j o b s ' ) ; . . . C R E A T E F O R E I G N T A B L E w o r k f l o w . w o r k f l o w _ s h a r d 1 ( n a m e t e x t , s t a t e t e x t ) S E R V E R s h a r d 1 O P T I O N S ( s c h e m a _ n a m e ' w o r k f l o w ' , t a b l e _ n a m e ' w o r k f l o w ' ) ; . . . C R E A T E V I E W w o r k f l o w . w o r k f l o w A S S E L E C T ' s h a r d 1 ' : : t e x t A S s h a r d , * F R O M w o r k f l o w _ s h a r d . w o r k f l o w _ s h a r d 1 U N I O N A L L S E L E C T ' s h a r d 2 ' : : t e x t A S s h a r d , * F R O M w o r k f l o w _ s h a r d . w o r k f l o w _ s h a r d 2 U N I O N A L L S E L E C T ' s h a r d 3 ' : : t e x t A S s h a r d , * F R O M w o r k f l o w _ s h a r d . w o r k f l o w _ s h a r d 3 . . . C R E A T E V I E W w o r k f l o w . j o b s A S S E L E C T ' s h a r d 1 ' : : t e x t A S s h a r d , * F R O M w o r k f l o w _ s h a r d . j o b s _ s h a r d 1 U N I O N A L L S E L E C T ' s h a r d 2 ' : : t e x t A S s h a r d , * F R O M w o r k f l o w _ s h a r d . j o b s _ s h a r d 2 U N I O N A L L S E L E C T ' s h a r d 3 ' : : t e x t A S s h a r d , * F R O M w o r k f l o w _ s h a r d . j o b s _ s h a r d 3 . . .
E X P L A I N S E L E C T * F R O M w o r k f l o w J O I N j o b s O N ( w o r k f l o w . s h a r d = j o b s . s h a r d a n d w o r k f l o w . n a m e = w o r k f l o w _ n a m e ) ;
Q U E R Y P L A N
M e r g e J o i n ( c o s t = 1 3 2 3 5 . 2 9 . . 4 1 5 5 5 . 0 8 r o w s = 1 8 7 8 6 1 0 w i d t h = 2 2 4 ) M e r g e C o n d : ( ( ( ' s h a r d 1 ' : : t e x t ) = ( ' s h a r d 1 ' : : t e x t ) ) A N D ( w o r k f l o w _ s h a r d 1 . n a m e = j o b s _ s h a r d 1 . w o r k f l o w _ n a m e ) )
S o r t K e y : ( ' s h a r d 1 ' : : t e x t ) , j o b s _ s h a r d 1 . w o r k f l o w _ n a m e
. . . . . .
S o r t K e y : ( ' s h a r d 1 ' : : t e x t ) , w o r k f l o w _ s h a r d 1 . n a m e
. . . . . . ( 7 3 r o w s )
E X P L A I N S E L E C T * F R O M w o r k f l o w J O I N j o b s O N ( w o r k f l o w . s h a r d = j o b s . s h a r d a n d w o r k f l o w . n a m e = w o r k f l o w _ n a m e ) W H E R E w o r k f l o w . s h a r d = ' s h a r d 1 ' ; Q U E R Y P L A N
H a s h J o i n ( c o s t = 2 3 2 . 8 6 . . 3 2 9 . 4 1 r o w s = 1 8 3 5 w i d t h = 2 2 4 ) H a s h C o n d : ( w o r k f l o w _ s h a r d 1 . n a m e = j o b s _ s h a r d 1 . w o r k f l o w _ n a m e )
( 7 r o w s )
E X P L A I N ( v e r b o s e ) S E L E C T * F R O M w o r k f l o w J O I N j o b s O N ( w o r k f l o w . s h a r d = j o b s . s h a r d a n d w o r k f l o w . n a m e = w o r k f l o w _ n a m e ) W H E R E w o r k f l o w . s h a r d = ' s h a r d 1 ' ; Q U E R Y P L A N
H a s h J o i n ( c o s t = 2 3 2 . 8 6 . . 3 2 9 . 4 1 r o w s = 1 8 3 5 w i d t h = 2 2 4 ) O u t p u t : ( ' s h a r d 1 ' : : t e x t ) , w o r k f l o w _ s h a r d 1 . n a m e , w o r k f l o w _ s h a r d 1 . s t a t e , ( ' s h a r d 1 ' : : t e x t ) , j o b s _ s h a r d 1 . w o r k f l o w _ n a m e , j o b s _ s h a r d 1 . n a m e , j o b s _ s h a r d 1 . s t a t e H a s h C o n d : ( w o r k f l o w _ s h a r d 1 . n a m e = j o b s _ s h a r d 1 . w o r k f l o w _ n a m e )
O u t p u t : ' s h a r d 1 ' : : t e x t , w o r k f l o w _ s h a r d 1 . n a m e , w o r k f l o w _ s h a r d 1 . s t a t e R e m o t e S Q L : S E L E C T n a m e , s t a t e F R O M w o r k f l o w . w o r k f l o w
O u t p u t : ( ' s h a r d 1 ' : : t e x t ) , j o b s _ s h a r d 1 . w o r k f l o w _ n a m e , j o b s _ s h a r d 1 . n a m e , j o b s _ s h a r d 1 . s t a t e
O u t p u t : ' s h a r d 1 ' : : t e x t , j o b s _ s h a r d 1 . w o r k f l o w _ n a m e , j o b s _ s h a r d 1 . n a m e , j o b s _ s h a r d 1 . s t a t e R e m o t e S Q L : S E L E C T w o r k f l o w _ n a m e , n a m e , s t a t e F R O M w o r k f l o w . j o b s ( 1 3 r o w s )
O n t h e s h a r d s : C R E A T E T A B L E f i r e _ f u n c ( i d b i g i n t , a i n t , b i n t , r e s u l t i n t ) ; C R E A T E F U N C T I O N a d d _ t w o ( ) R E T U R N S t r i g g e r A S $ _ $ b e g i n n e w . r e s u l t = n e w . a + n e w . b ; r e t u r n n e w ; e n d ; $ _ $ L A N G U A G E p l p g s q l ; C R E A T E T R I G G E R a d d _ t w o _ t r i g B E F O R E I N S E R T O N f i r e _ f u n c F O R E A C H R O W E X E C U T E P R O C E D U R E a d d _ t w o ( ) ; O n t h e h e a d n o d e : C R E A T E F O R E I G N T A B L E f i r e _ f u n c _ s h a r d 1 ( i d b i g i n t , a i n t , b i n t , r e s u l t i n t ) S E R V E R s h a r d 1 O P T I O N S ( s c h e m a _ n a m e ' w o r k f l o w ' , t a b l e _ n a m e ' f i r e _ f u n c ' ) ; C R E A T E F O R E I G N T A B L E f i r e _ f u n c _ s h a r d 2 ( i d b i g i n t , a i n t , b i n t , r e s u l t i n t ) S E R V E R s h a r d 2 O P T I O N S ( s c h e m a _ n a m e ' w o r k f l o w ' , t a b l e _ n a m e ' f i r e _ f u n c ' ) ; . . . = # i n s e r t i n t o f i r e _ f u n c _ s h a r d 2 ( i d , a , b ) v a l u e s ( 1 0 0 , 1 , 2 ) r e t u r n i n g i d , a , b , r e s u l t ; i d | a | b | r e s u l t
1 0 0 | 1 | 2 | 3 ( 1 r o w )
Stephen Frost sfrost@snowman.net @net_snow