Slony-I
1.2.6 Documentation

The PostgreSQL Global Development Group

Christopher Browne

Legal Notice

Table of Contents

Slony-I Introduction
1. Introduction to Slony-I
1.1. What Slony-I is
1.2. Why yet another replication system?
1.3. What Slony-I is not
1.4. Why doesn't Slony-I do automatic fail-over/promotion?
1.5. Current Limitations
1.6. Replication Models
2. Slony-I Communications Costs
3. System Requirements
3.1. Slony-I Software Dependancies
3.2. Getting Slony-I Source
3.3. Database Encoding
3.4. Time Synchronization
3.5. Network Connectivity
4. Slony-I Installation
4.1. Short Version
4.2. Configuration
4.3. Example
4.4. Build
4.5. Installing Slony-I Once Built;
4.6. Building Documentation: Admin Guide
4.7. Installing Slony-I from RPMs
4.8. Installing the Slony-I service on Windows
5. Slony-I Concepts
5.1. Cluster
5.2. Node
5.3. Replication Set
5.4. Origin, Providers and Subscribers
5.5. slon Daemon
5.6. slonik Configuration Processor
6. Defining Slony-I Clusters
7. Defining Slony-I Replication Sets
7.1. Primary Keys
7.2. Grouping tables into sets
7.3. The Pathology of Sequences
Slony-I Administration
1. Slony-IBest Practices
2. Replicating Your First Database
2.1. Creating the pgbench user
2.2. Preparing the databases
2.3. Configuring the Database for Replication.
3. Slon daemons
4. Subscribing Nodes
5. Monitoring
5.1. Nagios Replication Checks
5.2. Monitoring Slony-I using MRTG
5.3. test_slony_state
5.4. search-logs.sh
6. Slony-I Maintenance
6.1. Watchdogs: Keeping Slons Running
6.2. Parallel to Watchdog: generate_syncs.sh
6.3. Testing Slony-I State
6.4. Replication Test Scripts
6.5. Other Replication Tests
6.6. Log Files
7. Reshaping a Cluster
8. Doing switchover and failover with Slony-I
8.1. Foreword
8.2. Controlled Switchover
8.3. Failover
8.4. Automating FAIL OVER
8.5. After Failover, Reconfiguring Former Origin
9. Slony-I listen paths
9.1. How listening can break
9.2. How the listen configuration should look
9.3. Automated Listen Path Generation
10. Slony-I Path Communications
11. Locking Issues
12. A Task-Oriented View of Slony-I
12.1. Adding a table to replication
12.2. How to add columns to a replicated table
12.3. How to remove replication for a node
12.4. Adding A Node To Replication
12.5. How do I reshape subscriptions?
12.6. How do I use Log Shipping?
12.7. How do I know replication is working?
12.8. How do I upgrade Slony-I to a newer version?
12.9. What happens when I fail over?
12.10. How do I “move master” to a new node?
12.11. How Do I Do A “Full Sync” On A Table?
13. Dropping things from Slony-I Replication
13.1. Dropping A Whole Node
13.2. Dropping An Entire Set
13.3. Unsubscribing One Node From One Set
13.4. Dropping A Table From Replication
13.5. Dropping A Sequence From Replication
14. Log Shipping - Slony-I with Files
14.1. Usage Hints
15. Database Schema Changes (DDL)
15.1. Changes that you might not want to process using EXECUTE SCRIPT
15.2. Testing DDL Changes
16. Using Slonik
17. Embedding Slonik in Shell Scripts
18. Not Using Slonik - Bare Metal Slony-I Functions
19. Slony-I Administration Scripts
19.1. altperl Scripts
19.2. mkslonconf.sh
19.3. launch_clusters.sh
19.4. slony1_extract_schema.sh
19.5. slony-cluster-analysis
19.6. Generating slonik scripts using configure-replication.sh
20. Slony-I Upgrade
21. Using Slony-I for PostgreSQL Upgrades
22. Slony-I Test Bed Framework
23. Log Analysis
23.1. CONFIG notices
23.2. DEBUG Notices
23.3. How to read Slony-I logs
23.4. Log Messages and Implications
24. More Slony-I Help
24.1. Other Information Sources
Slony-I FAQ
I. Core Slony-I Programs
slonSlony-I daemon
Run-time Configuration
1. Logging
2. Connection settings
3. Archive Logging Options
4. Event Tuning
slonikSlony-I command processor
Slonik Command Summary
1. Introduction
1.1. General outline
I. Slonik Meta Commands
INCLUDE — pulling in slonik code from another file
DEFINE — Defining a named symbol
II. Slonik Preamble Commands
CLUSTER NAME — preamble - identifying Slony-I cluster
ADMIN CONNINFO — preamble - identifying PostgreSQL database
III. Configuration and Action commmands
ECHO — Generic output tool
EXIT — Terminate Slonik script with signal
INIT CLUSTER — Initialize Slony-I cluster
STORE NODE — Initialize Slony-I node
DROP NODE — Remove the node from participating in the replication
UNINSTALL NODE — Decommission Slony-I node
RESTART NODE — Restart Slony-I node
STORE PATH — Configure Slony-I node connection
DROP PATH — Delete Slony-I connection information
STORE LISTEN — Configure Slony-I node to indicate where to listen for events
DROP LISTEN — Eliminate configuration indicating how Slony-I node listens for events
TABLE ADD KEY — Add primary key for use by Slony-I for a table with no suitable key
CREATE SET — Create Slony-I replication set
DROP SET — Discard Slony-I replication set
MERGE SET — Merge Slony-I replication sets together
SET ADD TABLE — Add a table to a Slony-I replication set
SET ADD SEQUENCE — Add a sequence to a Slony-I replication set
SET DROP TABLE — Remove a table from a Slony-I replication set
SET DROP SEQUENCE — Remove a sequence from a Slony-I replication set
SET MOVE TABLE — Move a table from one Slony-I replication set to another
SET MOVE SEQUENCE — Move a sequence from one Slony-I replication set to another
STORE TRIGGER — Indicate that a trigger should not be disabled by Slony-I on a subscriber node
DROP TRIGGER — Return a trigger to default behavior, where it will not fire on subscriber nodes
SUBSCRIBE SET — Start replication of Slony-I set
UNSUBSCRIBE SET — End replication of Slony-I set
LOCK SET — Guard Slony-I replication set to prepare for MOVE SET
UNLOCK SET — Unlock a Slony-I set that was locked
MOVE SET — Change origin of a Slony-I replication set
FAILOVER — Fail a broken replication set over to a backup node
EXECUTE SCRIPT — Execute SQL/DDL script
UPDATE FUNCTIONS — Reload stored functions
WAIT FOR EVENT — Have Slonik script wait for previous event to complete
REPAIR CONFIG — Resets the name-to-oid mapping of tables in a replication set, useful for restoring a node after a pg_dump.
SYNC — Generate an ordinary SYNC event
SLEEP — Sleep using system sleep()
Slony-I Supported Platforms
Release Checklist
1. Schema schemadoc
1.1. Table: sl_config_lock
1.2. Table: sl_confirm
1.3. Table: sl_event
1.4. Table: sl_listen
1.5. Table: sl_log_1
1.6. Table: sl_log_2
1.7. Table: sl_node
1.8. Table: sl_nodelock
1.9. Table: sl_path
1.10. Table: sl_registry
1.11. View: sl_seqlastvalue
1.12. Table: sl_seqlog
1.13. Table: sl_sequence
1.14. Table: sl_set
1.15. Table: sl_setsync
1.16. Table: sl_subscribe
1.17. Table: sl_table
1.18. Table: sl_trigger
1.19. add_missing_table_field( text, text, text, text )
1.20. addpartiallogindices( )
1.21. altertableforreplication( integer )
1.22. altertablerestore( integer )
1.23. checkmoduleversion( )
1.24. cleanupevent( )
1.25. cleanupnodelock( )
1.26. copyfields( integer )
1.27. createevent( name, text )
1.28. createevent( name, text, text )
1.29. createevent( name, text, text, text )
1.30. createevent( name, text, text, text, text )
1.31. createevent( name, text, text, text, text, text )
1.32. createevent( name, text, text, text, text, text, text )
1.33. createevent( name, text, text, text, text, text, text, text )
1.34. createevent( name, text, text, text, text, text, text, text, text )
1.35. createevent( name, text, text, text, text, text, text, text, text, text )
1.36. ddlscript_complete( integer, text, integer )
1.37. ddlscript_complete_int( integer, integer )
1.38. ddlscript_prepare( integer, integer )
1.39. ddlscript_prepare_int( integer, integer )
1.40. denyaccess( )
1.41. determineattkindserial( text )
1.42. determineattkindunique( text, name )
1.43. determineidxnameserial( text )
1.44. determineidxnameunique( text, name )
1.45. disablenode( integer )
1.46. disablenode_int( integer )
1.47. droplisten( integer, integer, integer )
1.48. droplisten_int( integer, integer, integer )
1.49. dropnode( integer )
1.50. dropnode_int( integer )
1.51. droppath( integer, integer )
1.52. droppath_int( integer, integer )
1.53. dropset( integer )
1.54. dropset_int( integer )
1.55. droptrigger( integer, name )
1.56. droptrigger_int( integer, name )
1.57. enablenode( integer )
1.58. enablenode_int( integer )
1.59. enablesubscription( integer, integer, integer )
1.60. enablesubscription_int( integer, integer, integer )
1.61. failednode( integer, integer )
1.62. failednode2( integer, integer, integer, bigint, bigint )
1.63. failoverset_int( integer, integer, integer )
1.64. forwardconfirm( integer, integer, bigint, timestamp without time zone )
1.65. generate_sync_event( interval )
1.66. getlocalnodeid( name )
1.67. getmoduleversion( )
1.68. getsessionrole( name )
1.69. initializelocalnode( integer, text )
1.70. killbackend( integer, text )
1.71. lockedset( )
1.72. lockset( integer )
1.73. logswitch_finish( )
1.74. logswitch_start( )
1.75. logswitch_weekly( )
1.76. logtrigger( )
1.77. mergeset( integer, integer )
1.78. mergeset_int( integer, integer )
1.79. moveset( integer, integer )
1.80. moveset_int( integer, integer, integer )
1.81. reachablefromnode( integer, integer[] )
1.82. rebuildlistenentries( )
1.83. registernodeconnection( integer )
1.84. registry_get_int4( text, integer )
1.85. registry_get_text( text, text )
1.86. registry_get_timestamp( text, timestamp without time zone )
1.87. registry_set_int4( text, integer )
1.88. registry_set_text( text, text )
1.89. registry_set_timestamp( text, timestamp without time zone )
1.90. sequencelastvalue( text )
1.91. sequencesetvalue( integer, integer, bigint, bigint )
1.92. setaddsequence( integer, integer, text, text )
1.93. setaddsequence_int( integer, integer, text, text )
1.94. setaddtable( integer, integer, text, name, text )
1.95. setaddtable_int( integer, integer, text, name, text )
1.96. setdropsequence( integer )
1.97. setdropsequence_int( integer )
1.98. setdroptable( integer )
1.99. setdroptable_int( integer )
1.100. setmovesequence( integer, integer )
1.101. setmovesequence_int( integer, integer )
1.102. setmovetable( integer, integer )
1.103. setmovetable_int( integer, integer )
1.104. setsessionrole( name, text )
1.105. slon_quote_brute( text )
1.106. slon_quote_input( text )
1.107. slonyversion( )
1.108. slonyversionmajor( )
1.109. slonyversionminor( )
1.110. slonyversionpatchlevel( )
1.111. storelisten( integer, integer, integer )
1.112. storelisten_int( integer, integer, integer )
1.113. storenode( integer, text, boolean )
1.114. storenode_int( integer, text, boolean )
1.115. storepath( integer, integer, text, integer )
1.116. storepath_int( integer, integer, text, integer )
1.117. storeset( integer, text )
1.118. storeset_int( integer, integer, text )
1.119. storetrigger( integer, name )
1.120. storetrigger_int( integer, name )
1.121. subscribeset( integer, integer, integer, boolean )
1.122. subscribeset_int( integer, integer, integer, boolean )
1.123. tableaddkey( text )
1.124. tabledropkey( integer )
1.125. tablehasserialkey( text )
1.126. terminatenodeconnections( integer )
1.127. uninstallnode( )
1.128. unlockset( integer )
1.129. unsubscribeset( integer, integer )
1.130. unsubscribeset_int( integer, integer )
1.131. updaterelname( integer, integer )
1.132. updatereloid( integer, integer )
1.133. upgradeschema( text )

List of Figures

1.1. Definition of view sl_seqlastvalue

List of Tables

1. Supported Platforms