trouble.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:11k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1.  <Chapter Id="trouble">
  2.   <Title>Troubleshooting</Title>
  3.   <sect1>
  4.    <title>Postmaster Startup Failures</title>
  5.    <para>
  6.     There are several common reasons for the postmaster to fail to start up.
  7.     Check the postmaster's log file, or start it by hand (without redirecting
  8.     standard output or standard error) to see what complaint messages appear.
  9.     Some of the possible error messages are reasonably self-explanatory,
  10.     but here are some that are not:
  11.    </para>
  12.    <para>
  13.     <ProgramListing>
  14. FATAL: StreamServerPort: bind() failed: Address already in use
  15.         Is another postmaster already running on that port?
  16.     </ProgramListing>
  17.     This usually means just what it suggests: you accidentally started a
  18.     second postmaster on the same port where one is already running.
  19.     However, if the kernel error
  20.     message is not "Address already in use" or some variant of that wording,
  21.     there may be a different problem.  For example, trying to start a
  22.     postmaster on a reserved port number may draw something like
  23.     <ProgramListing>
  24. $ postmaster -i -p 666
  25. FATAL: StreamServerPort: bind() failed: Permission denied
  26.         Is another postmaster already running on that port?
  27.     </ProgramListing>
  28.    </para>
  29.    <para>
  30.     <ProgramListing>
  31. IpcMemoryCreate: shmget failed (Invalid argument) key=5440001, size=83918612, permission=600
  32. FATAL 1:  ShmemCreate: cannot create region
  33.     </ProgramListing>
  34.     A message like this probably means that your kernel's limit on the size
  35.     of shared memory areas is smaller than the buffer area that Postgres
  36.     is trying to create.  (Or it could mean that you don't have SysV-style
  37.     shared memory support configured into your kernel at all.)  As a temporary
  38.     workaround, you can try starting the postmaster with a smaller-than-normal
  39.     number of buffers (-B switch).  You will eventually want to reconfigure
  40.     your kernel to increase the allowed shared memory size, however.
  41.     You may see this message when trying to start multiple postmasters on
  42.     the same machine, if their total space requests exceed the kernel limit.
  43.    </para>
  44.    <para>
  45.     <ProgramListing>
  46. IpcSemaphoreCreate: semget failed (No space left on device) key=5440026, num=16, permission=600
  47.     </ProgramListing>
  48.     A message like this does <emphasis>not</emphasis> mean that you've run out
  49.     of disk space; it means that your kernel's limit on the number of SysV
  50.     semaphores is smaller than the number Postgres wants to create.  As above,
  51.     you may be able to work around the problem by starting the postmaster with
  52.     a reduced number of backend processes (-N switch), but you'll eventually
  53.     want to increase the kernel limit.
  54.    </para>
  55.   </sect1>
  56.   <sect1>
  57.    <title>Client Connection Problems</title>
  58.    <para>
  59.     Once you have a running postmaster, trying to connect to it with
  60.     client applications can fail for a variety of reasons.  The sample
  61.     error messages shown here are for clients based on recent versions
  62.     of libpq --- clients based on other interface libraries may produce
  63.     other messages with more or less information.
  64.    </para>
  65.    <para>
  66.     <ProgramListing>
  67. connectDB() -- connect() failed: Connection refused
  68. Is the postmaster running (with -i) at 'server.joe.com' and accepting connections on TCP/IP port '5432'?
  69.     </ProgramListing>
  70.     This is the generic "I couldn't find a postmaster to talk to" failure.
  71.     It looks like the above when TCP/IP communication is attempted, or like
  72.     this when attempting Unix-socket communication to a local postmaster:
  73.     <ProgramListing>
  74. connectDB() -- connect() failed: No such file or directory
  75. Is the postmaster running at 'localhost' and accepting connections on Unix socket '5432'?
  76.     </ProgramListing>
  77.     The last line is useful in verifying that the client is trying to connect
  78.     where it is supposed to.  If there is in fact no postmaster
  79.     running there, the kernel error message will typically be either
  80.     "Connection refused" or "No such file or directory", as illustrated.
  81.     (It is particularly important to realize that "Connection refused" in
  82.     this context does <emphasis>not</emphasis> mean that the postmaster
  83.     got your connection request and rejected it --- that case will produce
  84.     a different message, as shown below.)
  85.     Other error messages such as "Connection timed out" may indicate more
  86.     fundamental problems, like lack of network connectivity.
  87.    </para>
  88.    <para>
  89.     <ProgramListing>
  90. No pg_hba.conf entry for host 123.123.123.123, user joeblow, database testdb
  91.     </ProgramListing>
  92.     This is what you are most likely to get if you succeed in contacting
  93.     a postmaster, but it doesn't want to talk to you.  As the message
  94.     suggests, the postmaster refused the connection request because it
  95.     found no authorizing entry in its pg_hba.conf configuration file.
  96.    </para>
  97.    <para>
  98.     <ProgramListing>
  99. Password authentication failed for user 'joeblow'
  100.     </ProgramListing>
  101.     Messages like this indicate that you contacted the postmaster, and it's
  102.     willing to talk to you, but not until you pass the authorization method
  103.     specified in the pg_hba.conf file.  Check the password you're providing,
  104.     or check your Kerberos or IDENT software if the complaint mentions
  105.     one of those authentication types.
  106.    </para>
  107.    <para>
  108.     <ProgramListing>
  109. FATAL 1:  SetUserId: user 'joeblow' is not in 'pg_shadow'
  110.     </ProgramListing>
  111.     This is another variant of authentication failure: no Postgres create_user
  112.     command has been executed for the given username.
  113.    </para>
  114.    <para>
  115.     <ProgramListing>
  116. FATAL 1:  Database testdb does not exist in pg_database
  117.     </ProgramListing>
  118.     There's no database by that name under the control of this postmaster.
  119.     Note that if you don't specify a database name, it defaults to your
  120.     Postgres username, which may or may not be the right thing.
  121.    </para>
  122.   </sect1>
  123.   <sect1>
  124.    <title>Debugging Messages</title>
  125.    <para>
  126.     The <Application>postmaster</Application> occasionally prints out  
  127.     messages  which
  128.     are  often helpful during troubleshooting.  If you wish
  129.     to view debugging messages from the <Application>postmaster</Application>, 
  130.     you can
  131.     start  it with the -d option and redirect the output to
  132.     the log file:
  133.     <ProgramListing>
  134. % postmaster -d >& pm.log &
  135.     </ProgramListing>
  136.     If you do not wish to see these messages, you can type
  137.     <ProgramListing>
  138. % postmaster -S
  139.     </ProgramListing>
  140.     and the <Application>postmaster</Application> will be "S"ilent.  
  141.     Notice that there
  142.     is no ampersand ("&amp") at the end of the last example so
  143.     postmaster will be running in the foreground.
  144.    </Para>
  145.    <sect2 Id="pg-options-trouble">
  146.     <Title>pg_options</Title>
  147.     <Para>
  148.      <Note>
  149.       <Para>
  150.        Contributed by <ULink url="mailto:dz@cs.unitn.it">Massimo Dal Zotto</ULink>
  151.       </Para>
  152.      </Note>
  153.     </para>
  154.     <Para>
  155.      The optional file <filename>data/pg_options</filename> contains runtime
  156.      options used by the backend to control trace messages and other backend
  157.      tunable parameters.
  158.      What makes this file interesting is the fact that it is re-read by a backend
  159.      when it receives a SIGHUP signal, making thus possible to change run-time
  160.      options on the fly without needing to restart 
  161.      <productname>Postgres</productname>.
  162.      The options specified in this file may be debugging flags used by the trace
  163.      package (<filename>backend/utils/misc/trace.c</filename>) or numeric
  164.      parameters which can be used by the backend to control its behaviour.
  165.      New options and parameters must be defined in
  166.      <filename>backend/utils/misc/trace.c</filename> and
  167.      <filename>backend/include/utils/trace.h</filename>.
  168.     </para>
  169.    <para>
  170.     pg_options can also be specified with the <option>-T</option> switch of 
  171.     <productname>Postgres</productname>:
  172.     <programlisting>
  173. postgres <replaceable>options</replaceable> -T "verbose=2,query,hostlookup-"
  174.     </programlisting>
  175.    </para>
  176.    <Para>
  177.     The functions used for printing errors and debug messages can now make use
  178.     of the <citetitle>syslog(2)</citetitle> facility. Message printed to stdout
  179.     or stderr are prefixed by a timestamp containing also the backend pid:
  180.     <programlisting>
  181. #timestamp          #pid    #message
  182. 980127.17:52:14.173 [29271] StartTransactionCommand
  183. 980127.17:52:14.174 [29271] ProcessUtility: drop table t;
  184. 980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full
  185. 980127.17:52:14.186 [29286] Async_NotifyHandler
  186. 980127.17:52:14.186 [29286] Waking up sleeping backend process
  187. 980127.19:52:14.292 [29286] Async_NotifyFrontEnd
  188. 980127.19:52:14.413 [29286] Async_NotifyFrontEnd done
  189. 980127.19:52:14.466 [29286] Async_NotifyHandler done
  190.     </programlisting>
  191.    </para>
  192.    <para>
  193.     This format improves readability of the logs and allows people to understand
  194.     exactly which backend is doing what and at which time. It also makes
  195.     easier to write simple awk or perl scripts which monitor the log to
  196.     detect database errors or problem, or to compute transaction time statistics.
  197.    </para>
  198.    <para>
  199.     Messages printed to syslog use the log facility LOG_LOCAL0.
  200.     The use of syslog can be controlled with the syslog pg_option.
  201.     Unfortunately many functions call directly <function>printf()</function>
  202.     to print their messages to stdout or stderr and this output can't be
  203.     redirected to syslog or have timestamps in it. 
  204.     It would be advisable that all calls to printf would be replaced with the
  205.     PRINTF macro and output to stderr be changed to use EPRINTF instead so that
  206.     we can control all output in a uniform way.
  207.    </Para>
  208.     <para>
  209.      The format of the <filename>pg_options</filename> file is as follows:
  210.      <programlisting>
  211. # <replaceable>comment</replaceable>
  212. <replaceable>option</replaceable>=<replaceable class="parameter">integer_value</replaceable>  # set value for <replaceable>option</replaceable>
  213. <replaceable>option</replaceable>                # set <replaceable>option</replaceable> = 1
  214. <replaceable>option</replaceable>+               # set <replaceable>option</replaceable> = 1
  215. <replaceable>option</replaceable>-               # set <replaceable>option</replaceable> = 0
  216.      </programlisting>
  217.      Note that <replaceable class="parameter">keyword</replaceable> can also be
  218.      an abbreviation of the option name defined in
  219.      <filename>backend/utils/misc/trace.c</filename>.
  220.     </Para>
  221.     <Para>
  222.      Refer to <xref linkend="pg-options-title" endterm="pg-options-title">
  223.      for a complete list of option keywords and possible values.
  224.     </para>
  225.    </sect2>
  226.   </sect1>
  227.  </Chapter>
  228. <!-- Keep this comment at the end of the file
  229. Local variables:
  230. mode: sgml
  231. sgml-omittag:nil
  232. sgml-shorttag:t
  233. sgml-minimize-attributes:nil
  234. sgml-always-quote-attributes:t
  235. sgml-indent-step:1
  236. sgml-indent-data:t
  237. sgml-parent-document:nil
  238. sgml-default-dtd-file:"./reference.ced"
  239. sgml-exposed-tags:nil
  240. sgml-local-catalogs:"/usr/lib/sgml/CATALOG"
  241. sgml-local-ecat-files:nil
  242. End:
  243. -->