Chris Browne cbbrowne at lists.slony.info
Fri Mar 16 12:01:28 PDT 2007
Update of /home/cvsd/slony1/slony1-engine/doc/adminguide
In directory main.slony.info:/tmp/cvs-serv29453

Modified Files:
      Tag: REL_1_2_STABLE
	addthings.sgml adminscripts.sgml bestpractices.sgml 
	defineset.sgml faq.sgml firstdb.sgml help.sgml 
	installation.sgml intro.sgml monitoring.sgml 
	releasechecklist.sgml slon.sgml slonconf.sgml slonik_ref.sgml 
	slonyupgrade.sgml startslons.sgml testbed.sgml 
Log Message:
Check numerous revisions made to admin guide in HEAD into 1.2 branch


Index: testbed.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/testbed.sgml,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -C2 -d -r1.10 -r1.10.2.1
*** testbed.sgml	2 Aug 2006 18:34:59 -0000	1.10
--- testbed.sgml	16 Mar 2007 19:01:26 -0000	1.10.2.1
***************
*** 95,98 ****
--- 95,112 ----
  to be a &postgres; <quote>superuser.</quote> </para>  </glossdef> </glossentry>
  
+ <glossentry><glossterm> <envar>WEAKUSER</envar> </glossterm>
+ <glossdef><para> By default, the user <filename>postgres</filename> is
+ used; this is taken as the default user ID to use for the <xref linkend="stmtstorepath"> connections to all of the
+ databases. </para>
+ 
+ <para> There are also variables <envar>WEAKUSER1</envar> thru
+ <envar>WEAKUSER13</envar> which allow specifying a separate user name
+ for each database instance.  This user <emphasis> does not </emphasis>
+ need to be a &postgres; <quote>superuser.</quote> This user can start
+ out with no permissions; it winds up granted read permissions on the
+ tables that the test uses, plus read access throughout the &slony1;
+ schema, plus write access to one table and sequence used to manage
+ node locks. </para> </glossdef> </glossentry>
+ 
  <glossentry><glossterm> <envar>HOST</envar> </glossterm>
  <glossdef><para> By default, <filename>localhost</filename> is used.

Index: intro.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/intro.sgml,v
retrieving revision 1.25
retrieving revision 1.25.2.1
diff -C2 -d -r1.25 -r1.25.2.1
*** intro.sgml	2 Aug 2006 18:34:58 -0000	1.25
--- intro.sgml	16 Mar 2007 19:01:26 -0000	1.25.2.1
***************
*** 142,148 ****
  collects updates using triggers, and neither schema changes, large
  object operations, nor <command>TRUNCATE</command> requests are able
! to triggers suitable to inform &slony1; when those sorts of changes
! take place.  As a result, the only database objects where &slony1; can
! replicate updates are tables and sequences.  </para>
  
  <para> Note that with the <emphasis>use</emphasis> of triggers comes
--- 142,148 ----
  collects updates using triggers, and neither schema changes, large
  object operations, nor <command>TRUNCATE</command> requests are able
! to have triggers suitable to inform &slony1; when those sorts of
! changes take place.  As a result, the only database objects where
! &slony1; can replicate updates are tables and sequences.  </para>
  
  <para> Note that with the <emphasis>use</emphasis> of triggers comes
***************
*** 167,171 ****
  scripts via the <application>slonik</application> <xref
  linkend="stmtddlscript"> operation.  That is not handled
! <quote>automaticly;</quote> you, as a database administrator, will
  have to construct an SQL DDL script and submit it, via <xref
  linkend="stmtddlscript"> and there are a number of further <link
--- 167,171 ----
  scripts via the <application>slonik</application> <xref
  linkend="stmtddlscript"> operation.  That is not handled
! <quote>automatically;</quote> you, as a database administrator, will
  have to construct an SQL DDL script and submit it, via <xref
  linkend="stmtddlscript"> and there are a number of further <link

Index: slonyupgrade.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/slonyupgrade.sgml,v
retrieving revision 1.3.2.1
retrieving revision 1.3.2.2
diff -C2 -d -r1.3.2.1 -r1.3.2.2
*** slonyupgrade.sgml	15 Nov 2006 22:10:45 -0000	1.3.2.1
--- slonyupgrade.sgml	16 Mar 2007 19:01:26 -0000	1.3.2.2
***************
*** 20,24 ****
  <listitem><para> Execute a &lslonik; script containing the
  command <command>update functions (id = [whatever]);</command> for
! each node in the cluster.</para></listitem>
  <listitem><para> Start all slons.  </para> </listitem>
  </itemizedlist>
--- 20,27 ----
  <listitem><para> Execute a &lslonik; script containing the
  command <command>update functions (id = [whatever]);</command> for
! each node in the cluster.</para>
! <note><para>Remember that your slonik upgrade script like all other 
! slonik scripts must contain the proper preamble commands to function.
! </para></note></listitem>
  <listitem><para> Start all slons.  </para> </listitem>
  </itemizedlist>

Index: monitoring.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/monitoring.sgml,v
retrieving revision 1.29.2.5
retrieving revision 1.29.2.6
diff -C2 -d -r1.29.2.5 -r1.29.2.6
*** monitoring.sgml	5 Dec 2006 23:24:27 -0000	1.29.2.5
--- monitoring.sgml	16 Mar 2007 19:01:26 -0000	1.29.2.6
***************
*** 171,175 ****
  a given path (<envar>LOGHOME</envar>), based both on the naming
  conventions used by the <xref linkend="launchclusters"> and <xref
! linkend="slonwatchdog"> systems used for launching &lslon; processes.</para>
  
  <para> Errors, if found, are listed, by log file, and emailed to the
--- 171,176 ----
  a given path (<envar>LOGHOME</envar>), based both on the naming
  conventions used by the <xref linkend="launchclusters"> and <xref
! linkend="slonwatchdog"> systems used for launching &lslon; 
! processes.</para>
  
  <para> Errors, if found, are listed, by log file, and emailed to the
***************
*** 183,186 ****
--- 184,212 ----
  for replication problems. </para>
  </sect2>
+ 
+ <sect2 id="wikigen"> <title> Building MediaWiki Cluster Summary </title>
+ 
+ <para> The script <filename>mkmediawiki.pl </filename>, in
+ <filename>tools</filename>, may be used to generate a cluster summary
+ compatible with the popular <ulink url="http://www.mediawiki.org/">
+ MediaWiki </ulink> software. </para>
+ 
+ <para> The gentle user might use the script as follows: </para>
+ 
+ <screen>
+ ~/logtail.en>         mvs login -d mywiki.example.info -u "Chris Browne" -p `cat ~/.wikipass` -w wiki/index.php                     
+ Doing login with host: logtail and lang: en
+ ~/logtail.en> perl $SLONYHOME/tools/mkmediawiki.pl --host localhost --database slonyregress1 --cluster slony_regress1  > Slony_replication.wiki
+ ~/logtail.en> mvs commit -m "More sophisticated generated Slony-I cluster docs" Slony_replication.wiki
+ Doing commit Slony_replication.wiki with host: logtail and lang: en
+ </screen>
+ 
+ <para> Note that <command>mvs</command> is a client written in Perl;
+ on <ulink url="http://www.debian.org/"> Debian GNU/Linux</ulink>, the
+ relevant package is called
+ <application>libwww-mediawiki-client-perl</application>; other systems
+ may have a packaged version of this under some similar name. </para>
+ 
+ </sect2>
  </sect1>
  <!-- Keep this comment at the end of the file

Index: firstdb.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/firstdb.sgml,v
retrieving revision 1.20.2.1
retrieving revision 1.20.2.2
diff -C2 -d -r1.20.2.1 -r1.20.2.2
*** firstdb.sgml	13 Mar 2007 16:04:46 -0000	1.20.2.1
--- firstdb.sgml	16 Mar 2007 19:01:26 -0000	1.20.2.2
***************
*** 140,146 ****
  and configuration is all done through the <xref linkend="slonik">
  tool. It is a specialized scripting aid that mostly calls stored
! procedures in the master/slave (node) databases.  The script to create
  the initial configuration for the simple master-slave setup of our
! <application>pgbench</application> database looks like this:
  
  <programlisting>
--- 140,184 ----
  and configuration is all done through the <xref linkend="slonik">
  tool. It is a specialized scripting aid that mostly calls stored
! procedures in the master/slave (node) databases. </para>
! 
! <sect3><title>Using the altperl scripts</title>
! 
! <para>
! Using the <xref linkend="altperl"> scripts is an easy way to get started.  The
! <command>slonik_build_env</command> script will generate output providing
! details you need to  omplete building a <filename>slon_tools.conf</filename>. 
! An example <filename>slon_tools.conf</filename> is provided in the distribution
! to get you started.  The altperl scripts will all reference
! this central configuration file in the future to ease administration. Once 
! slon_tools.conf has been created, you can proceed as follows:
! </para>
! 
! <programlisting>
! # Initialize cluster:
! $ slonik_init_cluster  | slonik 
! 
! # Start slon  (here 1 and 2 are node numbers)
! $ slon_start 1    
! $ slon_start 2
! 
! # Create Sets (here 1 is a set number)
! $ slonik_create_set 1             
! 
! # subscribe set to second node (1= set ID, 2= node ID)
! $ slonik_subscribe_set  2 | slonik
! </programlisting>
! 
! <para> You have now replicated your first database.  You can skip the following section
! of documentation if you'd like, which documents more of a <quote>bare-metal</quote> approach.</para>
! </sect3>
! 
! <sect3><title>Using slonik command directly</title>
! <para>The traditional approach to administering slony is to craft slonik
! commands directly. An example of this given here. </para>
! 
! 
! <para> The script to create
  the initial configuration for the simple master-slave setup of our
! <application>pgbench</application> database looks like this:</para>
  
  <programlisting>
***************
*** 201,205 ****
  	store path (server = 2, client = 1, conninfo='dbname=$SLAVEDBNAME host=$SLAVEHOST user=$REPLICATIONUSER');
  _EOF_
! </programlisting></para>
  
  <para>Is the <application>pgbench</application> still running?  If
--- 239,243 ----
  	store path (server = 2, client = 1, conninfo='dbname=$SLAVEDBNAME host=$SLAVEHOST user=$REPLICATIONUSER');
  _EOF_
! </programlisting>
  
  <para>Is the <application>pgbench</application> still running?  If
***************
*** 281,285 ****
  <application>pgbench</application> has completed, so that there are no
  new updates hitting the origin node, and that your slon sessions have
! caught up.
  
  <programlisting>
--- 319,323 ----
  <application>pgbench</application> has completed, so that there are no
  new updates hitting the origin node, and that your slon sessions have
! caught up.</para>
  
  <programlisting>
***************
*** 317,321 ****
  fi
  </programlisting>
- </para>
  
  <para>Note that there is somewhat more sophisticated documentation of
--- 355,358 ----
***************
*** 325,332 ****
  <para>If this script returns <command>FAILED</command> please contact the
  developers at <ulink url="http://slony.info/">
! http://slony.info/</ulink></para></sect2>
! 
  </sect1>
- 
  <!-- Keep this comment at the end of the file
  Local variables:
--- 362,368 ----
  <para>If this script returns <command>FAILED</command> please contact the
  developers at <ulink url="http://slony.info/">
! http://slony.info/</ulink></para></sect3>
! </sect2>
  </sect1>
  <!-- Keep this comment at the end of the file
  Local variables:

Index: bestpractices.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/bestpractices.sgml,v
retrieving revision 1.24
retrieving revision 1.24.2.1
diff -C2 -d -r1.24 -r1.24.2.1
*** bestpractices.sgml	17 Oct 2006 18:45:15 -0000	1.24
--- bestpractices.sgml	16 Mar 2007 19:01:26 -0000	1.24.2.1
***************
*** 376,379 ****
--- 376,418 ----
  </listitem>
  
+ <listitem><para> Lowering Authority </para>
+ 
+ <para> Traditionally, it has been stated that <quote>&slony1; needs to
+ use superuser connections.</quote> It turns out that this is not
+ entirely true, and and if there are particular concerns about
+ excessive use of superuser accounts, it is possible to reduce this
+ considerably. </para>
+ 
+ <para> It is true to say that each &lslon; <emphasis>must</emphasis>
+ have a superuser connection in order to manage the node that it is
+ assigned to.  It needs to be able to alter the system catalogue in
+ order to set up subscriptions and to process alterations
+ (<emphasis>e.g</emphasis> - to run <xref linkend="stmtddlscript"> and
+ other events that may alter the role of replicated tables on the local
+ node).  </para>
+ 
+ <para> However, the connections that &lslon; processes open to other
+ nodes to access events and process subcriptions do not need to have
+ nearly so much permission.  Indeed, one could set up a <quote>weak
+ user</quote> assigned to all <xref linkend="stmtstorepath"> requests.
+ The minimal permissions that this user, let's call it
+ <command>weakuser</command>, requires are as follows:</para>
+ 
+ <itemizedlist>
+ <listitem><para> It must have read access to the &slony1;-specific namespace </para> </listitem>
+ <listitem><para> It must have read access to all tables and sequences in that namespace</para> </listitem>
+ <listitem><para> It must have write access to the &slony1; table <envar>sl_nodelock</envar> and sequence <envar>sl_nodelock_nl_conncnt_seq</envar> </para> </listitem>
+ <listitem><para> At subscribe time, it must have read access to all of the replicated tables. </para> 
+ <para> Outside of subscription time, there is no need for access to access to the replicated tables. </para> </listitem>
+ <listitem><para> There is some need for read access to tables in pg_catalog; it has not been verified how little access would be suitable. </para> </listitem>
+ </itemizedlist>
+ 
+ <para> In version 1.3, the tests in the <xref linkend="testbed">
+ support using a <envar>WEAKUSER</envar> so that testing can regularly
+ confirm the minimal set of permissions needed to support
+ replication.</para>
+ 
+ </listitem>
+ 
  <listitem><para> The section on <link linkend="listenpaths"> listen
  paths </link> discusses the issues surrounding the table <xref

Index: installation.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/installation.sgml,v
retrieving revision 1.28
retrieving revision 1.28.2.1
diff -C2 -d -r1.28 -r1.28.2.1
*** installation.sgml	17 Oct 2006 18:33:18 -0000	1.28
--- installation.sgml	16 Mar 2007 19:01:26 -0000	1.28.2.1
***************
*** 182,193 ****
  <listitem><para><filename> $datadir/slony1_base.v73.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_base.v74.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_funcs.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_funcs.v73.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_funcs.v74.sql</filename></para></listitem>
! <listitem><para><filename> $datadir/xxid.v73.sql </filename></para></listitem>
  </itemizedlist>
  
  <para>The <filename>.sql</filename> files are not fully substituted
! yet.  And yes, both the 7.3 and the 7.4 files get installed on every
  system, irrespective of its version.  The <xref linkend="slonik">
  admin utility does namespace/cluster substitutions within these files,
--- 182,194 ----
  <listitem><para><filename> $datadir/slony1_base.v73.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_base.v74.sql</filename></para></listitem>
+ <listitem><para><filename> $datadir/slony1_base.v80.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_funcs.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_funcs.v73.sql</filename></para></listitem>
  <listitem><para><filename> $datadir/slony1_funcs.v74.sql</filename></para></listitem>
! <listitem><para><filename> $datadir/slony1_funcs.v80.sql</filename></para></listitem>
  </itemizedlist>
  
  <para>The <filename>.sql</filename> files are not fully substituted
! yet.  And yes, both the 7.3, 7.4 and the 8.0 files get installed on every
  system, irrespective of its version.  The <xref linkend="slonik">
  admin utility does namespace/cluster substitutions within these files,
***************
*** 308,311 ****
--- 309,327 ----
  &lt;service name&gt; &lt;config file&gt;</command>.</para> 
  
+ <para> For further information about the &windows; port, you may want
+ to see the following URLs: </para>
+ 
+ <itemizedlist>
+ 
+ <listitem><para> <ulink
+ url="http://developer.pgadmin.org/~hiroshi/Slony-I/"> Slony-I Windows
+ installer sample </ulink> </para> </listitem>
+ 
+ <listitem><para> <ulink url=
+ "http://people.planetpostgresql.org/xzilla/index.php?/archives/200-Alpha-testing-Slony-on-win32-Crib-Notes.html">
+ xzilla's Alpha testing Slony on win32 Crib Notes </ulink> </para> </listitem>
+ 
+ </itemizedlist>
+ 
  </sect2>
  

Index: help.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/help.sgml,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -C2 -d -r1.18.2.1 -r1.18.2.2
*** help.sgml	27 Oct 2006 15:35:32 -0000	1.18.2.1
--- help.sgml	16 Mar 2007 19:01:26 -0000	1.18.2.2
***************
*** 76,82 ****
  Freshmeat on &slony1; </ulink></para></listitem>
  
- <listitem> <para><ulink url="http://www.slony2.org/wiki/index.php"> 
- Slony-II Wiki</ulink> </para> </listitem> 
- 
  </itemizedlist>
  </sect2>
--- 76,79 ----

Index: startslons.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/startslons.sgml,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -C2 -d -r1.19 -r1.19.2.1
*** startslons.sgml	2 Aug 2006 18:34:59 -0000	1.19
--- startslons.sgml	16 Mar 2007 19:01:26 -0000	1.19.2.1
***************
*** 88,93 ****
  one point not preferable to run it whilst subscribing a very large
  replication set where it is expected to take many hours to do the
! initial <command>COPY SET</command>.  The problem that came up in that
! case was that it figured that since it hasn't done a
  <command>SYNC</command> in 2 hours, something was broken requiring
  restarting slon, thereby restarting the <command>COPY SET</command>
--- 88,94 ----
  one point not preferable to run it whilst subscribing a very large
  replication set where it is expected to take many hours to do the
! <command>COPY SET</command> (the main event that processes a
! <command>SUBSCRIBE SET</command> request).  The problem that came up
! in that case was that it figured that since it hasn't done a
  <command>SYNC</command> in 2 hours, something was broken requiring
  restarting slon, thereby restarting the <command>COPY SET</command>

Index: slonik_ref.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/slonik_ref.sgml,v
retrieving revision 1.61.2.4
retrieving revision 1.61.2.5
diff -C2 -d -r1.61.2.4 -r1.61.2.5
*** slonik_ref.sgml	31 Oct 2006 22:03:40 -0000	1.61.2.4
--- slonik_ref.sgml	16 Mar 2007 19:01:26 -0000	1.61.2.5
***************
*** 1265,1269 ****
       WAIT FOR EVENT (ORIGIN = 3, CONFIRMED = 1);
       SYNC (ID=1);
!      MERGE SET ( ID = 2, ADD ID = 9999, ORIGIN = 1 );
      </programlisting>
     </refsect1>
--- 1265,1269 ----
       WAIT FOR EVENT (ORIGIN = 3, CONFIRMED = 1);
       SYNC (ID=1);
!      MERGE SET ( ID = 1, ADD ID = 9999, ORIGIN = 1 );
      </programlisting>
     </refsect1>
***************
*** 1934,1953 ****
      </para>
      
!     <para> If the tables on the subscriber are <emphasis>not</emphasis> empty, then
!      the <command>COPY SET</command> process winds up doing more work than should be
!      strictly necessary:</para>
       <itemizedlist>
        
!       <listitem><para> It deletes all <quote>old</quote> entries in
!       the table</para></listitem>
  
!       <listitem><para> Those old entries
! 	clutter up the table until it is next
! 	<command>VACUUM</command>ed <emphasis>after</emphasis> the
! 	subscription process is complete</para></listitem>
        
        <listitem><para> The indices for the table will contain entries
! 	for the old, deleted entries, which will slow the process of
! 	inserting new entries into the index.</para></listitem>
       </itemizedlist>
  
--- 1934,1959 ----
      </para>
      
!     <para> If the tables on the subscriber are
!     <emphasis>not</emphasis> empty, then the <command>COPY
!     SET</command> event (which is part of the subscription process)
!     may wind up doing more work than should be strictly
!     necessary:</para>
       <itemizedlist>
+ 
+       <listitem><para> It attempts to <command>TRUNCATE</command> the
+       table, which will be efficient. </para> </listitem>
        
!       <listitem><para> If that fails (a foreign key relationship might
!       prevent TRUNCATE from working), it uses
!       <command>DELETE</command> to delete all <quote>old</quote>
!       entries in the table</para></listitem>
  
!       <listitem><para> Those old entries clutter up the table until it
!       is next <command>VACUUM</command>ed <emphasis>after</emphasis>
!       the subscription process is complete</para></listitem>
        
        <listitem><para> The indices for the table will contain entries
!       for the old, deleted entries, which will slow the process of
!       inserting new entries into the index.</para></listitem>
       </itemizedlist>
  
***************
*** 1960,1971 ****
  
       <para> The <command>SUBSCRIBE SET</command> request will,
!      nonetheless, return fairly much immediately, even though the work
!      is merely <quote>in progress.</quote> If you need to set up
!      subscriptions for a set of cascading nodes, you will need to wait
!      for each subscriber to complete subscribing before submitting
!      requests for subscriptions that use that node as a provider.  If
!      you don't, it won't be a big deal: <command>slonik</command> will
!      check the node, discover that it is not yet an active provider
!      for the set, and report back:</para>
  
  <programlisting>
--- 1966,1978 ----
  
       <para> The <command>SUBSCRIBE SET</command> request will,
!      nonetheless, return fairly much immediately, even though the
!      work, being handled by the <command>COPY SET</command> event, is
!      still in progress.  If you need to set up subscriptions for a set
!      of cascading nodes, you will need to wait for each subscriber to
!      complete subscribing before submitting requests for subscriptions
!      that use that node as a provider.  If you don't, it won't be a
!      big deal: <command>slonik</command> will check the node, discover
!      that it is not yet an active provider for the set, and report
!      back:</para>
  
  <programlisting>

Index: faq.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/faq.sgml,v
retrieving revision 1.66.2.3
retrieving revision 1.66.2.4
diff -C2 -d -r1.66.2.3 -r1.66.2.4
*** faq.sgml	2 Feb 2007 20:23:46 -0000	1.66.2.3
--- faq.sgml	16 Mar 2007 19:01:26 -0000	1.66.2.4
***************
*** 240,244 ****
  </screen></para></question>
  
- 
  <answer> <para> There is evidently some reasonably old outstanding
  transaction blocking &slony1; from processing the sync.  You might
--- 240,243 ----
***************
*** 1018,1022 ****
  
  <answer><para> Another would be to treat the node as having failed,
! and use the &slonik; command <xref linkend="stmtdropnode"> to drop the
  node, and recreate it.  If the database is heavily updated, it may
  well be cheaper to do this than it is to find a way to let it catch
--- 1017,1021 ----
  
  <answer><para> Another would be to treat the node as having failed,
! and use the &lslonik; command <xref linkend="stmtdropnode"> to drop the
  node, and recreate it.  If the database is heavily updated, it may
  well be cheaper to do this than it is to find a way to let it catch
***************
*** 1679,1685 ****
  index on the primary key, and leaves all indexes alone whilst using
  the &postgres; <command>COPY</command> command to load the data.
! Further hurting performane, the <command>COPY SET</command> event
! starts by deleting the contents of tables, which potentially leaves a
! lot of dead tuples
  </para>
  
--- 1678,1684 ----
  index on the primary key, and leaves all indexes alone whilst using
  the &postgres; <command>COPY</command> command to load the data.
! Further hurting performance, the <command>COPY SET</command> event (an
! event that the subscription process generates) starts by deleting the
! contents of tables, which leaves the table full of dead tuples.
  </para>
  

Index: releasechecklist.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/releasechecklist.sgml,v
retrieving revision 1.3.2.4
retrieving revision 1.3.2.5
diff -C2 -d -r1.3.2.4 -r1.3.2.5
*** releasechecklist.sgml	8 Nov 2006 19:49:25 -0000	1.3.2.4
--- releasechecklist.sgml	16 Mar 2007 19:01:26 -0000	1.3.2.5
***************
*** 7,42 ****
  <itemizedlist>
  
!   <listitem><para>Positive build reports for each supported platform -
!   although it is arguably less necessary for a comprehensive list if
!   we are releasing a minor upgrade </para></listitem> 
  
  <listitem><para>Some kind of Standard Test Plan</para></listitem> 
  <listitem><para>Binary RPM packages</para></listitem> 
  
! <listitem>
!  <para>If the release is a <quote>.0</quote> one, we need to
  open a new STABLE branch</para>
  
!  <para> <command> cvs tag -b REL_1_2_STABLE</command></para>
! </listitem>
! <listitem>
!  <para>Tag the with the release ID. For version 1.1.2, this
! would be <envar>REL_1_1_2 </envar></para>
  
!  <para> <command> cvs tag REL_1_1_2 </command></para>
! </listitem> 
  
! <listitem><para>Check out a copy via <command>cvs export -rREL_1_1_2 </command>
  
!   </para></listitem> 
  
  <listitem><para>Run <application>autoconf</application> so as to
  regenerate <filename>configure</filename> from
! <filename>configure.ac</filename>
  
-   </para></listitem> 
  <listitem><para>Purge directory <filename>autom4te.cache</filename> so it is not included in the build  </para></listitem> 
- <listitem><para>Purge out .cvsignore files; this can be done with the command <command> find . -name .cvsignore | xargs rm </command>  </para></listitem> 
  
  <listitem><para> Run <filename>tools/release_checklist.sh</filename> </para>
  
--- 7,59 ----
  <itemizedlist>
  
! <listitem><para>Positive build reports for each supported platform -
! although it is arguably less necessary for a comprehensive list if we
! are releasing a minor upgrade </para></listitem>
  
  <listitem><para>Some kind of Standard Test Plan</para></listitem> 
+ 
+ <listitem><para> If the release modified the set of version-specific
+ SQL files in <filename>src/backend</filename>
+ (<emphasis>e.g.</emphasis> - it added a new
+ <filename>slony1_base.v83.sql</filename> or
+ <filename>slony1_funcs.v83.sql</filename>), or if we have other
+ changes to the shape of &postgres; version support, the function
+ <function>load_slony_functions() </function> in
+ <filename>src/slonik/slonik.c</filename> needs to be revised to
+ reflect the new shape of things.</para> </listitem>
+ 
+ <listitem><para> The new release needs to be added to function
+ <function>upgradeSchema(text)</function> in
+ <filename>src/backend/slony1_funcs.sql</filename>. </para>
+ 
+ <para> This takes place in a <quote>cross-branch</quote> fashion; if
+ we add version 1.1.9, in the 1.1 branch, then version 1.1.9 needs to
+ be added to the 1.2 branch as well as to later branches
+ (<emphasis>e.g.</emphasis> - 1.3, 1.4, HEAD).  Earlier branches will
+ normally not need to be made aware of versions added to later
+ branches... </para> </listitem>
+ 
  <listitem><para>Binary RPM packages</para></listitem> 
  
! <listitem> <para>If the release is a <quote>.0</quote> one, we need to
  open a new STABLE branch</para>
  
! <para> <command> cvs tag -b REL_1_2_STABLE</command></para> </listitem>
  
! <listitem> <para>Tag the with the release ID. For version 1.1.2, this
! would be <envar>REL_1_1_2 </envar></para>
  
! <para> <command> cvs tag REL_1_1_2 </command></para> </listitem>
  
! <listitem><para>Check out a copy via <command>cvs export -rREL_1_1_2
! </command> </para></listitem>
  
  <listitem><para>Run <application>autoconf</application> so as to
  regenerate <filename>configure</filename> from
! <filename>configure.ac</filename></para></listitem> 
  
  <listitem><para>Purge directory <filename>autom4te.cache</filename> so it is not included in the build  </para></listitem> 
  
+ <listitem><para>Purge out .cvsignore files; this can be done with the command <command> find . -name .cvsignore | xargs rm </command>  </para></listitem> 
  <listitem><para> Run <filename>tools/release_checklist.sh</filename> </para>
  

Index: defineset.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/defineset.sgml,v
retrieving revision 1.25
retrieving revision 1.25.2.1
diff -C2 -d -r1.25 -r1.25.2.1
*** defineset.sgml	2 Aug 2006 18:34:57 -0000	1.25
--- defineset.sgml	16 Mar 2007 19:01:26 -0000	1.25.2.1
***************
*** 43,47 ****
  <emphasis>candidate</emphasis> primary key, that is, some index on a
  combination of fields that is both UNIQUE and NOT NULL, then you can
! specify the key, as in</para>
  
  <programlisting>
--- 43,47 ----
  <emphasis>candidate</emphasis> primary key, that is, some index on a
  combination of fields that is both UNIQUE and NOT NULL, then you can
! specify that key, as shown in the following example. </para>
  
  <programlisting>
***************
*** 52,55 ****
--- 52,69 ----
  </programlisting>
  
+ <para> However, once you have come this far, there is little reason not
+ to just declare some suitable index to be a primary key, which requires
+ that the columns involved are NOT NULL, and which will establish a unique
+ index. Here is an example of this: </para>
+ 
+ <programlisting>
+ DROP INDEX my_table_name_col1_col2_uniq_idx;
+ ALTER TABLE my_table_name ADD PRIMARY KEY (col1, col2);
+ </programlisting>
+ 
+ <para>If your application is not somehow referencing the index by name,
+ the this should not lose you anything, and it gives you the clear design
+ benefit that a primary key has been declared for the table. </para>
+ 
  <para> Notice that while you need to specify the namespace for the
  table, you must <emphasis>not</emphasis> specify the namespace for the
***************
*** 68,78 ****
  <para> It is not terribly important whether you pick a
  <quote>true</quote> primary key or a mere <quote>candidate primary
! key;</quote> it is, however, recommended that you have one of those
! instead of having &slony1; populate the PK column for you.  If you
! don't have a suitable primary key, that means that the table hasn't
! got any mechanism from your application's standpoint for keeping
! values unique.  &slony1; may therefore introduce a new failure mode
! for your application, and this also implies that you had a way to
! enter confusing data into the database.</para>
  </sect2>
  
--- 82,92 ----
  <para> It is not terribly important whether you pick a
  <quote>true</quote> primary key or a mere <quote>candidate primary
! key;</quote> it is, however, strongly recommended that you have one of
! those instead of having &slony1; populate the PK column for you. If you
! don't have a suitable primary key, that means that the table hasn't got
! any mechanism, from your application's standpoint, for keeping values
! unique. &slony1; may, therefore, introduce a new failure mode for your
! application, and this also implies that you had a way to enter confusing
! data into the database.</para>
  </sect2>
  

Index: slonconf.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/slonconf.sgml,v
retrieving revision 1.14.2.1
retrieving revision 1.14.2.2
diff -C2 -d -r1.14.2.1 -r1.14.2.2
*** slonconf.sgml	2 Feb 2007 20:23:46 -0000	1.14.2.1
--- slonconf.sgml	16 Mar 2007 19:01:26 -0000	1.14.2.2
***************
*** 87,91 ****
        </indexterm>
        <listitem>
!         <para>Debug log level (higher value ==> more output).  Range: [0,4], default 4</para>
        </listitem>
      </varlistentry>
--- 87,97 ----
        </indexterm>
        <listitem>
!         <para>Debug log level (higher value ==> more output).  Range: [0,4], default 2</para>
! 
! 	<para> There are <link linkend="nineloglevels">nine log
! 	message types</link>; using this option, some or all of
! 	the <quote>debugging</quote> levels may be left out of the
! 	slon logs. </para>
! 
        </listitem>
      </varlistentry>

Index: adminscripts.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/adminscripts.sgml,v
retrieving revision 1.40.2.7
retrieving revision 1.40.2.8
diff -C2 -d -r1.40.2.7 -r1.40.2.8
*** adminscripts.sgml	5 Jan 2007 19:28:48 -0000	1.40.2.7
--- adminscripts.sgml	16 Mar 2007 19:01:26 -0000	1.40.2.8
***************
*** 14,41 ****
  <indexterm><primary>altperl scripts for &slony1;</primary></indexterm>
  
! <para>In the <filename>altperl</filename> directory in the
! <application>CVS</application> tree, there is a sizable set of
! <application>Perl</application> scripts that may be used to administer
! a set of &slony1; instances, which support having arbitrary numbers of
! nodes.</para>
  
! <para>Most of them generate Slonik scripts that are then to be passed
! on to the <xref linkend="slonik"> utility to be submitted to all of
! the &slony1; nodes in a particular cluster.  At one time, this
! embedded running <xref linkend="slonik"> on the slonik scripts.
  Unfortunately, this turned out to be a pretty large calibre
  <quote>foot gun</quote>, as minor typos on the command line led, on a
! couple of occasions, to pretty calamitous actions, so the behavior has
! been changed so that the scripts simply submit output to standard
! output.  The savvy administrator should review the script
! <emphasis>before</emphasis> submitting it to <xref
! linkend="slonik">.</para>
  
! <sect3><title>Node/Cluster Configuration - cluster.nodes</title>
! <indexterm><primary>cluster.nodes - node/cluster configuration for Perl tools</primary></indexterm>
  
  <para>The UNIX environment variable <envar>SLONYNODES</envar> is used
  to determine what Perl configuration file will be used to control the
! shape of the nodes in a &slony1; cluster.</para>
  
  <para>What variables are set up.
--- 14,49 ----
  <indexterm><primary>altperl scripts for &slony1;</primary></indexterm>
  
! <para>There is a set of scripts to simplify administeration
! of set of &slony1; instances. The scripts support having arbitrary numbers of
! nodes. They may be installed as part of the installation process:</para>
  
! <para><command>
!  ./configure --with-perltools
! </command></para>
! 
! <para>This will produce a number of scripts with the prefix
! <command>slonik_</command>.  They eliminate tedium by always referring
! to a central configuration file for the details of your site
! configuration. A documented sample of this file is provided in
! <filename>altperl/slon_tools.conf-sample</filename>. Most also include
! some command line help with the "--help" option, making them easier to
! learn and use.
! </para>
! 
! <para>Most generate Slonik scripts that are printed to STDOUT. 
! At one time, the commands were passed directly to <xref linkend="slonik"> for execution. 
  Unfortunately, this turned out to be a pretty large calibre
  <quote>foot gun</quote>, as minor typos on the command line led, on a
! couple of occasions, to pretty calamitous actions. The savvy administrator should review the script
! <emphasis>before</emphasis> piping it to <xref linkend="slonik">.</para>
  
! <sect3><title>Support for Multiple Clusters</title>
! <indexterm><primary>Multiple Cluster support for the altperl tools</primary></indexterm>
  
  <para>The UNIX environment variable <envar>SLONYNODES</envar> is used
  to determine what Perl configuration file will be used to control the
! shape of the nodes in a &slony1; cluster. If it is not provided, a
! default <filename>slon_tools.conf</filename> location will be
! referenced. </para>
  
  <para>What variables are set up.
***************
*** 85,88 ****
--- 93,97 ----
  </programlisting>
  </sect3>
+ 
  <sect3><title>Set configuration - cluster.set1, cluster.set2</title>
  <indexterm><primary>cluster.set1 - replication set configuration for Perl tools</primary></indexterm>
***************
*** 98,130 ****
  control what tables will be in a particular replication set.</para>
  
- <para>What variables are set up.</para>
- <itemizedlist>
- <listitem><para>$TABLE_ID = 44;</para>
- <para> Each table must be identified by a unique number; this variable controls where numbering starts</para>
- </listitem>
- <listitem><para>$SEQUENCE_ID = 17;</para>
- <para> Each sequence must be identified by a unique number; this variable controls where numbering starts</para>
- </listitem>
- <listitem><para>@PKEYEDTABLES</para>
- 
- <para> An array of names of tables to be replicated that have a
- defined primary key so that &slony1; can automatically select its key</para>
- </listitem>
- <listitem><para>%KEYEDTABLES</para>
- <para> A hash table of tables to be replicated, where the hash index
- is the table name, and the hash value is the name of a unique not null
- index suitable as a "candidate primary key."</para>
- </listitem>
- <listitem><para>@SERIALTABLES</para>
- 
- <para> An array of names of tables to be replicated that have no
- candidate for primary key.  &slony1; will add a key field based on a
- sequence that &slony1; generates</para>
- </listitem>
- <listitem><para>@SEQUENCES</para>
- 
- <para> An array of names of sequences that are to be replicated</para>
- </listitem>
- </itemizedlist>
  </sect3>
  <sect3><title>slonik_build_env</title>
--- 107,110 ----
***************
*** 536,539 ****
--- 516,520 ----
  use...</para>
  </sect3>
+ 
  <sect3><title>Node-Specific Values</title>
  
***************
*** 649,652 ****
--- 630,643 ----
  </sect3>
  </sect2>
+ 
+ <sect2 id="bsd-ports-profile"> <title> <filename> slon.in-profiles </filename> </title>
+ <subtitle> Apache-Style profiles for FreeBSD <filename>ports/databases/slony/*</filename> </subtitle>
+ 
+ <para> In the tools area, <filename>slon.in-profiles</filename> is a
+ script that might be used to start up &lslon; instances at the time of
+ system startup.  It is designed to interact with the FreeBSD Ports
+ system.</para>
+ 
+ </sect2>
  </sect1>
  <!-- Keep this comment at the end of the file

Index: slon.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/slon.sgml,v
retrieving revision 1.29
retrieving revision 1.29.2.1
diff -C2 -d -r1.29 -r1.29.2.1
*** slon.sgml	2 Aug 2006 18:34:59 -0000	1.29
--- slon.sgml	16 Mar 2007 19:01:26 -0000	1.29.2.1
***************
*** 41,54 ****
    <variablelist>
     <varlistentry>
!     <term><option>-d</option><replaceable class="parameter"> debuglevel</replaceable></term>
      <listitem>
       <para>
!       The <envar>log_level</envar> specifies which Debug levels
        <application>slon</application> should display when logging its
        activity.
       </para>
!      <para>
!       The eight levels of logging are:
        <itemizedlist>
         <listitem><para>Error</para></listitem>
         <listitem><para>Warn</para></listitem>
--- 41,55 ----
    <variablelist>
     <varlistentry>
!     <term><option>-d</option><replaceable class="parameter"> log_level</replaceable></term>
      <listitem>
       <para>
!       The <envar>log_level</envar> specifies which levels of debugging messages
        <application>slon</application> should display when logging its
        activity.
       </para>
!      <para id="nineloglevels">
!       The nine levels of logging are:
        <itemizedlist>
+        <listitem><para>Fatal</para></listitem>
         <listitem><para>Error</para></listitem>
         <listitem><para>Warn</para></listitem>
***************
*** 61,69 ****
        </itemizedlist>
       </para>
!      <para> Thus, <emphasis>all</emphasis> the non-debugging log
!      levels are always displayed in the logs.  If
!      <envar>log_level</envar> is set to 2 (a routine, and, seemingly
       preferable choice), then output at debugging levels 1 and 2 will
       also be displayed.</para>
      </listitem>
     </varlistentry>
--- 62,72 ----
        </itemizedlist>
       </para>
! 
!      <para> The first five non-debugging log levels (from Fatal to
!      Info) are <emphasis>always</emphasis> displayed in the logs.  If
!      <envar>log_level</envar> is set to 2 (a routine, and, seemingly,
       preferable choice), then output at debugging levels 1 and 2 will
       also be displayed.</para>
+ 
      </listitem>
     </varlistentry>

Index: addthings.sgml
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/addthings.sgml,v
retrieving revision 1.23.2.3
retrieving revision 1.23.2.4
diff -C2 -d -r1.23.2.3 -r1.23.2.4
*** addthings.sgml	7 Nov 2006 20:34:17 -0000	1.23.2.3
--- addthings.sgml	16 Mar 2007 19:01:26 -0000	1.23.2.4
***************
*** 135,138 ****
--- 135,149 ----
  linkend="stmtddlscript">.</para>
  
+ <para> Alternatively, if you have the <link linkend="altperl"> altperl
+ scripts </link> installed, you may use
+ <command>slonik_execute_script</command> for this purpose: </para>
+ 
+ <para> <command> slonik_execute_script [options] set#
+ full_path_to_sql_script_file </command></para>
+ 
+ <para> See <command>slonik_execute_script -h</command> for further
+ options; note that this uses <xref linkend="stmtddlscript">
+ underneath. </para>
+ 
  <para> There are a number of <quote>sharp edges</quote> to note...</para>
  



More information about the Slony1-commit mailing list