FAQ 35.8 KB
Newer Older
B
Bruce Momjian 已提交
1 2 3

                Frequently Asked Questions (FAQ) for PostgreSQL
                                       
B
Bruce Momjian 已提交
4
   Last updated: Fri Jun 4 23:30:19 EDT 1999
B
Bruce Momjian 已提交
5 6 7 8 9 10 11
   
   Current maintainer: Bruce Momjian (maillist@candle.pha.pa.us)
   
   The most recent version of this document can be viewed at the
   postgreSQL Web site, http://postgreSQL.org.
   
   Linux-specific questions are answered in
B
Bruce Momjian 已提交
12
   http://postgreSQL.org/docs/faq-linux.html.
B
Bruce Momjian 已提交
13 14
   
   Irix-specific questions are answered in
B
Bruce Momjian 已提交
15
   http://postgreSQL.org/docs/faq-irix.html.
B
Bruce Momjian 已提交
16 17
     _________________________________________________________________
   
B
Bruce Momjian 已提交
18 19
                             General questions
                                      
B
Bruce Momjian 已提交
20 21 22 23 24 25 26 27 28 29
   1.1) What is PostgreSQL?
   1.2) What does PostgreSQL run on?
   1.3) Where can I get PostgreSQL?
   1.4) What's the copyright on PostgreSQL?
   1.5) Support for PostgreSQL
   1.6) Latest release of PostgreSQL
   1.7) Is there a commercial version of PostgreSQL?
   1.8) What documentation is available for PostgreSQL?
   1.9) What version of SQL does PostgreSQL use?
   1.10) Does PostgreSQL work with databases from earlier versions of
B
Bruce Momjian 已提交
30
   PostgreSQL?
B
Bruce Momjian 已提交
31
   1.11) Are there ODBC drivers for PostgreSQL?
B
Bruce Momjian 已提交
32
   1.12) What tools are available for hooking PostgreSQL to Web pages?
B
Bruce Momjian 已提交
33 34
   1.13) Does PostgreSQL have a graphical user interface? A report
   generator? A embedded query language interface?
B
Bruce Momjian 已提交
35
   1.14) How can I learn SQL?
B
Bruce Momjian 已提交
36
   1.15) What languages are available to communicate with PostgreSQL?
B
Bruce Momjian 已提交
37
   
B
Bruce Momjian 已提交
38 39
                    Installation/Configuration questions
                                      
B
Bruce Momjian 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53
   2.1) initdb doesn't run
   2.2) when I start up the postmaster, I get "FindBackend: could not
   find a backend to execute..." "postmaster: could not find backend to
   execute..."
   2.3) The system seems to be confused about commas, decimal points, and
   date formats.
   2.4) How do I install PostgreSQL somewhere other than
   /usr/local/pgsql?
   2.5) When I run postmaster, I get a Bad System Call core dumped
   message.
   2.6) When I try to start the postmaster, I get IpcMemoryCreate errors.
   2.7) I have changed a source file, but a recompile does not see the
   change?
   2.8) How do I prevent other hosts from accessing my PostgreSQL
B
Bruce Momjian 已提交
54
   database?
B
Bruce Momjian 已提交
55
   2.9) I can't access the database as the root user.
B
Bruce Momjian 已提交
56 57 58
   2.10) All my servers crash under concurrent table access. Why?
   2.11) How do I tune the database engine for better performance?
   2.12) What debugging features are available in PostgreSQL?
B
Bruce Momjian 已提交
59 60 61 62
   2.13) When I try to start the postmaster, I get IpcSemaphoreCreate
   errors. Why?
   2.14) I get 'Sorry, too many clients' when trying to connect. Why?
   2.15) What non-unix ports are available?
B
Bruce Momjian 已提交
63
   
B
Bruce Momjian 已提交
64 65
                           Operational questions
                                      
B
Bruce Momjian 已提交
66
   3.1) Does PostgreSQL support nested subqueries?
B
Bruce Momjian 已提交
67
   3.2) How can I write client applications for PostgreSQL?
B
Bruce Momjian 已提交
68 69
   3.3) How do I set up a pg_group?
   3.4) What is the exact difference between binary cursors and normal
B
Bruce Momjian 已提交
70
   cursors?
B
Bruce Momjian 已提交
71
   3.5) What is an R-tree index and what is it used for?
B
Bruce Momjian 已提交
72 73
   3.6) What is the maximum size for a row, table, database?
   3.7) My queries are slow or don't make use of the indexes. Why?
B
Bruce Momjian 已提交
74
   3.8) How do I do regular expression searches? case-insensitive regexp
B
Bruce Momjian 已提交
75
   searching?
B
Bruce Momjian 已提交
76 77 78 79 80 81 82 83
   3.9) I experienced a server crash during a vacuum. How do I remove the
   lock file?
   3.10) What is the difference between the various character types?
   3.11) In a query, how do I detect if a field is NULL?
   3.12) How do I see how the query optimizer is evaluating my query?
   3.13) How do I create a serial/auto-incrementing field?
   3.14) What are the pg_psort.XXX files in my database directory?
   3.15) Why can't I connect to my database from another machine?
B
Bruce Momjian 已提交
84
   3.16) How do I find out what indices or operations are defined in the
B
Bruce Momjian 已提交
85
   database?
B
Bruce Momjian 已提交
86 87 88 89
   3.17) What is an oid? What is a tid?
   3.18) What is the meaning of some of the terms used in PostgreSQL?
   3.19) What is Genetic Query Optimization?
   3.20) How do you remove a column from a table?
B
Bruce Momjian 已提交
90
   3.21) How do I select only the first few rows of a query?
B
Bruce Momjian 已提交
91
   3.22) How much database disk space is required to store data from a
B
Bruce Momjian 已提交
92
   typical flat file?
B
Bruce Momjian 已提交
93 94 95 96 97
   3.23) How do I get a list of tables, or other things I can see in
   psql?
   3.24) Why do I get the error "FATAL: palloc failure: memory
   exhausted?"
   3.25) How do I tell what PostgreSQL version I am running?
B
Bruce Momjian 已提交
98
   
B
Bruce Momjian 已提交
99 100
                    Questions about extending PostgreSQL
                                      
B
Bruce Momjian 已提交
101 102 103 104 105 106 107
   4.1) I wrote a user-defined function and when I run it in psql, it
   dumps core.
   4.2) I get messages of the type NOTICE:PortalHeapMemoryFree:
   0x402251d0
   4.3) I've written some nifty new types and functions for PostgreSQL.
   4.4) How do I write a C function to return a tuple?
   
B
Bruce Momjian 已提交
108 109
                                    Bugs
                                      
B
Bruce Momjian 已提交
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
   5.1) How do I make a bug report?
     _________________________________________________________________
   
Section 1: General Questions

  1.1) What is PostgreSQL?
  
   PostgreSQL is an enhancement of the POSTGRES database management
   system, a next-generation DBMS research prototype. While PostgreSQL
   retains the powerful data model and rich data types of POSTGRES, it
   replaces the PostQuel query language with an extended subset of SQL.
   PostgreSQL is free and the complete source is available.
   
   PostgreSQL development is being performed by a team of Internet
   developers who all subscribe to the PostgreSQL development mailing
   list. The current coordinator is Marc G. Fournier
   (scrappy@postgreSQL.org). (See below on how to join). This team is now
   responsible for all current and future development of PostgreSQL.
   
   The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many
   others have contributed to the porting, testing, debugging and
   enhancement of the code. The original Postgres code, from which
   PostgreSQL is derived, was the effort of many graduate students,
   undergraduate students, and staff programmers working under the
   direction of Professor Michael Stonebraker at the University of
   California, Berkeley.
   
   The original name of the software at Berkeley was Postgres. When SQL
   functionality was added in 1995, its name was changed to Postgres95.
   The name was changed at the end of 1996 to PostgreSQL.
   
  1.2) What does PostgreSQL run on?
  
   The authors have compiled and tested PostgreSQL on the following
   platforms(some of these compiles require gcc 2.7.0):
     * aix - IBM on AIX 3.2.5 or 4.x
     * alpha - DEC Alpha AXP on Digital Unix 2.0, 3.2, 4.0
     * BSD44_derived - OSs derived from 4.4-lite BSD (NetBSD, FreeBSD)
B
Bruce Momjian 已提交
148
     * bsdi - BSD/OS 2.x, 3.x, 4.x
B
Bruce Momjian 已提交
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
     * dgux - DG/UX 5.4R4.11
     * hpux - HP PA-RISC on HP-UX 9.0, 10
     * i386_solaris - i386 Solaris
     * irix5 - SGI MIPS on IRIX 5.3
     * linux - Intel x86 on Linux 2.0 and Linux ELF SPARC on Linux ELF
       PPC on Linux Elf (For non-ELF Linux, see LINUX_ELF below).
     * sco - SCO 3.2v5
     * sparc_solaris - SUN SPARC on Solaris 2.4, 2.5, 2.5.1
     * sunos4 - SUN SPARC on SunOS 4.1.3
     * svr4 - Intel x86 on Intel SVR4 and MIPS
     * ultrix4 - DEC MIPS on Ultrix 4.4
       
  1.3) Where can I get PostgreSQL?
  
   The primary anonymous ftp site for PostgreSQL is:
     * ftp://ftp.postgreSQL.org/pub
       
   A mirror site exists at:
     * ftp://postgres95.vnet.net/pub/postgres95
     * ftp://ftp.luga.or.at/pub/postgres95
     * ftp://cal011111.student.utwente.nl/pub/postgres95
     * ftp://ftp.uni-trier.de/pub/database/rdbms/postgres/postgres95
     * ftp://rocker.sch.bme.hu
       
  1.4) What's the copyright on PostgreSQL?
  
   PostgreSQL is subject to the following COPYRIGHT.
   
   PostgreSQL Data Base Management System
   
   Copyright (c) 1994-6 Regents of the University of California
   
   Permission to use, copy, modify, and distribute this software and its
   documentation for any purpose, without fee, and without a written
   agreement is hereby granted, provided that the above copyright notice
   and this paragraph and the following two paragraphs appear in all
   copies.
   
   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
   FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
   INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
   ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   
   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
   PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
   CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
   UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
   
  1.5) Support for PostgreSQL
  
B
Bruce Momjian 已提交
202 203
   There is no official support for PostgreSQL from the University of
   California, Berkeley. It is maintained through volunteer effort.
B
Bruce Momjian 已提交
204
   
B
Bruce Momjian 已提交
205 206 207 208
   The main mailing list is: pgsql-general@postgreSQL.org. It is
   available for discussion of matters pertaining to PostgreSQL, For info
   on how to subscribe, send a mail with the lines in the body (not the
   subject line)
B
Bruce Momjian 已提交
209

B
Bruce Momjian 已提交
210 211
        subscribe
        end
B
Bruce Momjian 已提交
212

B
Bruce Momjian 已提交
213
   to pgsql-general-request@postgreSQL.org.
B
Bruce Momjian 已提交
214 215
   
   There is also a digest list available. To subscribe to this list, send
B
Bruce Momjian 已提交
216
   email to: pgsql-general-digest-request@postgreSQL.org with a BODY of:
B
Bruce Momjian 已提交
217

B
Bruce Momjian 已提交
218 219
        subscribe
        end
B
Bruce Momjian 已提交
220 221 222 223

   Digests are sent out to members of this list whenever the main list
   has received around 30k of messages.
   
B
Bruce Momjian 已提交
224 225
   The bugs mailing list available. To subscribe to this list, send email
   to bugs-request@postgreSQL.org with a BODY of:
B
Bruce Momjian 已提交
226 227 228 229 230 231
   
   There is also a developers discussion mailing list available. To
   subscribe to this list, send email to hackers-request@postgreSQL.org
   with a BODY of:
   

B
Bruce Momjian 已提交
232 233
        subscribe
        end
B
Bruce Momjian 已提交
234

B
Bruce Momjian 已提交
235 236
   Additional mailing lists and information about PostgreSQL can be found
   via the PostgreSQL WWW home page at:
B
Bruce Momjian 已提交
237 238 239
   
     http://postgreSQL.org
     
B
Bruce Momjian 已提交
240
   There also an IRC channel on EFNet, channel #PostgreSQL. I use the
B
Bruce Momjian 已提交
241
   unix command irc -c '#PostgreSQL' "$USER" irc.phoenix.net
B
Bruce Momjian 已提交
242
   
B
Bruce Momjian 已提交
243 244
  1.6) Latest release of PostgreSQL
  
B
Bruce Momjian 已提交
245
   The latest release of PostgreSQL is version 6.5.
B
Bruce Momjian 已提交
246
   
B
Bruce Momjian 已提交
247
   We plan to have major releases every four months.
B
Bruce Momjian 已提交
248 249 250 251 252
   
  1.7) Is there a commercial version of PostgreSQL?
  
   Illustra Information Technology (a wholly owned subsidiary of Informix
   Software, Inc.) sells an object-relational DBMS called Illustra that
B
Bruce Momjian 已提交
253 254
   was originally based on Postgres. For more information, contact
   sales@illustra.com
B
Bruce Momjian 已提交
255 256 257
   
  1.8) What documentation is available for PostgreSQL?
  
B
Bruce Momjian 已提交
258
   Several manuals, manual pages, and some small test examples are
B
Bruce Momjian 已提交
259
   included in the distribution. See the /doc directory.
B
Bruce Momjian 已提交
260 261 262
   
   psql has some nice \d commands to show information about types,
   operators, functions, aggregates, etc.
B
Bruce Momjian 已提交
263
   
B
Bruce Momjian 已提交
264
   The web page contains even more documentation.
B
Bruce Momjian 已提交
265 266 267
   
  1.9) What version of SQL does PostgreSQL use?
  
B
Bruce Momjian 已提交
268
   PostgreSQL supports an extended subset of SQL-92.
B
Bruce Momjian 已提交
269
   
B
Bruce Momjian 已提交
270 271
   It is Y2K compliant.
   
B
Bruce Momjian 已提交
272 273
  1.10) Does PostgreSQL work with databases from earlier versions of
  PostgreSQL?
B
Bruce Momjian 已提交
274
  
B
Bruce Momjian 已提交
275 276
   Upgrading to 6.5 can not use the pg_upgrade utility. Those upgrading
   from earlier releases require a dump and restore.
B
Bruce Momjian 已提交
277
   
B
Bruce Momjian 已提交
278
   Those upgrading from versions earlier than 1.09 must upgrade to 1.09
B
Bruce Momjian 已提交
279
   first without a dump/reload, then dump the data from 1.09, and then
B
Bruce Momjian 已提交
280
   load it into 6.5.
B
Bruce Momjian 已提交
281 282 283 284 285
   
  1.11) Are there ODBC drivers for PostgreSQL?
  
   There are two ODBC drivers available, PostODBC and OpenLink ODBC.
   
B
Bruce Momjian 已提交
286 287
   PostODBC is included in the distribution. More information about it
   can be gotten from: http://www.insightdist.com/psqlodbc
B
Bruce Momjian 已提交
288
   
B
Bruce Momjian 已提交
289 290 291 292 293 294
   OpenLink ODBC can be gotten from http://www.openlinksw.com. It works
   with their standard ODBC client software so you'll have PostgreSQL
   ODBC available on every client platform they support (Win, Mac, Unix,
   VMS).
   
   They will probably be selling this product to people who need
B
Bruce Momjian 已提交
295 296 297
   commercial-quality support, but a freeware version will always be
   available. Questions to postgres95@openlink.co.uk.
   
B
Bruce Momjian 已提交
298
  1.12) What tools are available for hooking PostgreSQL to Web pages?
B
Bruce Momjian 已提交
299 300 301 302 303 304 305 306 307 308
  
   A nice introduction to Database-backed Web pages can be seen at:
   http://www.webtools.com
   
   For web integration, PHP is an excellent interface. The URL for that
   is http://www.php.net
   
   PHP is great for simple stuff, but for more complex stuff, some still
   use the perl interface and CGI.pm.
   
B
Bruce Momjian 已提交
309
   An WWW gateway based on WDB using perl can be downloaded from
B
Bruce Momjian 已提交
310 311
   http://www.eol.ists.ca/~dunlop/wdb-p95
   
B
Bruce Momjian 已提交
312 313 314 315
  1.13) Does PostgreSQL have a graphical user interface? A report generator? A
  embedded query language interface?
  
   We have a nice graphical user interface called pgaccess, which is
B
Bruce Momjian 已提交
316
   shipped as part of the distribution. Pgaccess also has a report
B
Bruce Momjian 已提交
317 318
   generator.
   
B
Bruce Momjian 已提交
319 320
   The web page is http://www.flex.ro/pgaccess We also include ecpg,
   which is an embedded SQL query language interface for C.
B
Bruce Momjian 已提交
321
   
B
Bruce Momjian 已提交
322
  1.14) How can I learn SQL?
B
Bruce Momjian 已提交
323
  
B
Bruce Momjian 已提交
324 325 326 327
   There is a nice tutorial at http://w3.one.net/~jhoffman/sqltut.htm and
   at
   http://ourworld.compuserve.com/homepages/Graeme_Birchall/DB2_COOK.HTM.
   
B
Bruce Momjian 已提交
328 329
   Many of our users like The Practical SQL Handbook, Bowman et al,
   Addison Wesley.
B
Bruce Momjian 已提交
330 331 332 333 334 335 336 337 338 339 340 341 342
   
  1.15) What languages are available to communicate with PostgreSQL?
  
   We have:
     * C(interfaces/libpq)
     * C++(interfaces/libpq++)
     * Embedded C(interfaces/ecpg)
     * Java(interfaces/jdbc)
     * Perl(interfaces/perl5)
     * ODBC(interfaces/odbc)
     * Python(interfaces/python)
     * TCL(interfaces/libpgtcl)
     * A crude C/4GL(contrib/pginterface)
B
Bruce Momjian 已提交
343 344 345 346 347 348
     _________________________________________________________________
   
Section 2: Installation Questions

  2.1) initdb doesn't run
  
B
Bruce Momjian 已提交
349
     * check that you don't have any of the previous version's binaries
B
Bruce Momjian 已提交
350 351
       in your path (If you see the message WARN:heap_modifytuple: repl
       is \ 9, this is the problem.)
B
Bruce Momjian 已提交
352
     * check to see that you have the proper paths set
B
Bruce Momjian 已提交
353
     * check that the postgres user owns the proper files
B
Bruce Momjian 已提交
354 355 356 357
       
  2.2) when I start up the postmaster, I get "FindBackend: could not find a
  backend to execute..." "postmaster: could not find backend to execute..."
  
B
Bruce Momjian 已提交
358
   You probably do not have the right path set up. The postgres
B
Bruce Momjian 已提交
359 360 361 362 363 364
   executable needs to be in your path.
   
  2.3) The system seems to be confused about commas, decimal points, and date
  formats.
  
   Check your locale configuration. PostgreSQL uses the locale settings
B
Bruce Momjian 已提交
365 366 367
   of the user that ran the postmaster process. There are postgres and
   psql SET commands to control the date format. Set those accordingly
   for your operating environment.
B
Bruce Momjian 已提交
368 369 370 371 372 373 374 375 376 377
   
  2.4) How do I install PostgreSQL somewhere other than /usr/local/pgsql?
  
   You need to edit Makefile.global and change POSTGRESDIR accordingly,
   or create a Makefile.custom and define POSTGRESDIR there.
   
  2.5) When I run postmaster, I get a Bad System Call core dumped message.
  
   It could be a variety of problems, but first check to see that you
   have system V extensions installed on your kernel. PostgreSQL requires
B
Bruce Momjian 已提交
378
   kernel support for shared memory and semaphores.
B
Bruce Momjian 已提交
379 380 381 382 383 384
   
  2.6) When I try to start the postmaster, I get IpcMemoryCreate errors.
  
   You either do not have shared memory configured properly in kernel or
   you need to enlarge the shared memory available in the kernel. The
   exact amount you need depends on your architecture and how many
B
Bruce Momjian 已提交
385 386 387
   buffers and backend processes you configure postmaster to run with.
   For most systems, with default numbers of buffers and processes, you
   need a minimum of ~1MB.
B
Bruce Momjian 已提交
388 389 390 391
   
  2.7) I have changed a source file, but a recompile does not see the change?
  
   The Makefiles do not have the proper dependencies for include files.
B
Bruce Momjian 已提交
392
   You have to do a make clean and then another make.
B
Bruce Momjian 已提交
393
   
B
Bruce Momjian 已提交
394
  2.8) How do I prevent other hosts from accessing my PostgreSQL database?
B
Bruce Momjian 已提交
395 396
  
   By default, PostgreSQL only allows connections from the local machine
B
Bruce Momjian 已提交
397 398 399
   using unix domain sockets. You must add the -i flag to the postmaster,
   and enable host-based authentication by modifying the file
   $PGDATA/pg_hba accordingly.
B
Bruce Momjian 已提交
400
   
B
Bruce Momjian 已提交
401
  2.9) I can't access the database as the root user.
B
Bruce Momjian 已提交
402 403 404 405 406 407 408 409 410 411 412 413 414
  
   You should not create database users with user id 0(root). They will
   be unable to access the database. This is a security precaution
   because of the ability of any user to dynamically link object modules
   into the database engine.
   
  2.10) All my servers crash under concurrent table access. Why?
  
   This problem can be caused by a kernel that is not configured to
   support semaphores.
   
  2.11) How do I tune the database engine for better performance?
  
B
Bruce Momjian 已提交
415 416 417 418 419 420 421
   Certainly, indices can speed up queries. The explain command allows
   you to see how PostgreSQL is interpreting your query, and which
   indices are being used.
   
   If you are doing a lot of inserts, consider doing them in a large
   batch using the copy command. This is much faster than single
   individual inserts. Second, statements not in a begin work/commit
B
Bruce Momjian 已提交
422
   transaction block are considered to be in their own transaction.
B
Bruce Momjian 已提交
423 424
   Consider performing several statements in a single transaction block.
   This reduces the transaction overhead. Also consider dropping and
B
Bruce Momjian 已提交
425
   recreating indices when making large data changes.
B
Bruce Momjian 已提交
426 427
   
   There are several tuning things that can be done. You can disable
B
Bruce Momjian 已提交
428
   fsync() by starting the postmaster with a -o -F option. This will
B
Bruce Momjian 已提交
429
   prevent fsync()'s from flushing to disk after every transaction.
B
Bruce Momjian 已提交
430 431
   
   You can also use the postmaster -B option to increase the number of
B
Bruce Momjian 已提交
432 433 434
   shared memory buffers used by the backend processes. If you make this
   parameter too high, the backends will not start or crash unexpectedly.
   Each buffer is 8K and the default is 64 buffers.
B
Bruce Momjian 已提交
435 436 437
   
   You can also use the postgres -S option to increase the maximum amount
   of memory used by each backend process for temporary sorts. Each
B
Bruce Momjian 已提交
438
   buffer is 1K and the default is 512 buffers.
B
Bruce Momjian 已提交
439
   
B
Bruce Momjian 已提交
440
   You can also use the cluster command to group data in base tables to
B
Bruce Momjian 已提交
441 442
   match an index. See the cluster(l) manual page for more details.
   
B
Bruce Momjian 已提交
443 444 445 446 447 448 449 450 451 452 453 454 455
  2.12) What debugging features are available in PostgreSQL?
  
   PostgreSQL has several features that report status information that
   can be valuable for debugging purposes.
   
   First, by running configure with the -enable-cassert option, many
   assert()'s monitor the progress of the backend and halt the program
   when something unexpected occurs.
   
   Both postmaster and postgres have several debug options available.
   First, whenever you start the postmaster, make sure you send the
   standard output and error to a log file, like:

B
Bruce Momjian 已提交
456
        cd /usr/local/pgsql
B
Bruce Momjian 已提交
457 458 459
        ./bin/postmaster >server.log 2>&1 &

   This will put a server.log file in the top-level PostgreSQL directory.
B
Bruce Momjian 已提交
460
   This file contains useful information about problems or errors
B
Bruce Momjian 已提交
461 462
   encountered by the server. Postmaster has a -d option that allows even
   more detailed information to be reported. The -d option takes a number
B
Bruce Momjian 已提交
463
   that specifies the debug level. Be warned that high debug level values
B
Bruce Momjian 已提交
464 465
   generates large log files.
   
B
Bruce Momjian 已提交
466 467
   You can actually run the postgres backend from the command line, and
   type your SQL statement directly. This is recommended only for
B
Bruce Momjian 已提交
468 469 470 471 472 473 474 475
   debugging purposes. Note that a newline terminates the query, not a
   semicolon. If you have compiled with debugging symbols, you can use a
   debugger to see what is happening. Because the backend was not started
   from the postmaster, it is not running in an identical environment and
   locking/backend interaction problems may not be duplicated. Some
   operating system can attach to a running backend directly to diagnose
   problems.
   
B
Bruce Momjian 已提交
476
   The postgres program has a -s, -A, -t options that can be very useful
B
Bruce Momjian 已提交
477 478 479 480 481 482 483
   for debugging and performance measurements.
   
   You can also compile with profiling to see what functions are taking
   execution time. The backend profile files will be deposited in the
   pgsql/data/base/dbname directory. The client profile file will be put
   in the current directory.
   
B
Bruce Momjian 已提交
484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525
  2.13) When I try to start the postmaster, I get IpcSemaphoreCreate errors.
  Why?
  
   If the error message is IpcSemaphoreCreate: semget failed (No space
   left on device) then your kernel is not configured with enough
   semaphores. Postgres needs one semaphore per potential backend
   process. A temporary solution is to start the postmaster with a
   smaller limit on the number of backend processes. Use -N with a
   parameter less than the default of 32. A more permanent solution is to
   increase your kernel's SEMMNS and SEMMNI parameters.
   
   If the error message is something else, you might not have semaphore
   support configured in your kernel at all.
   
  2.14) I get 'Sorry, too many clients' when trying to connect. Why?
  
   You need to increase the postmaster's limit on how many concurrent
   backend processes it can start.
   
   In Postgres 6.5, the default limit is 32 processes. You can increase
   it by restarting the postmaster with a suitable -N value. With the
   default configuration you can set -N as large as 1024; if you need
   more, increase MAXBACKENDS in include/config.h and rebuild. You can
   set the default value of -N at configuration time, if you like, using
   configure's --with-maxbackends switch.
   
   Note that if you make -N larger than 32, you should consider
   increasing -B beyond its default of 64. For large numbers of backend
   processes, you are also likely to find that you need to increase
   various Unix kernel configuration parameters. Things to check include
   the maximum size of shared memory blocks, SHMMAX, the maximum number
   of semaphores, SEMMNS and SEMMNI, the maximum number of processes,
   NPROC, the maximum number of processes per user, MAXUPRC, and the
   maximum number of open files, NFILE and NINODE. The reason that
   Postgres has a limit on the number of allowed backend processes is so
   that you can ensure that your system won't run out of resources.
   
   In Postgres versions prior to 6.5, the maximum number of backends was
   64, and changing it required a rebuild after altering the MaxBackendId
   constant in include/storage/sinvaladt.h.
   
  2.15) What non-unix ports are available?
B
Bruce Momjian 已提交
526 527 528 529 530 531
  
   It is possible to compile the libpq C library, psql, and other
   interfaces and binaries to run on MS Windows platforms. In this case,
   the client is running on MS Windows, and communicates via TCP/IP to a
   server running on one of our supported Unix platforms.
   
B
Bruce Momjian 已提交
532
   A file win32.mak is included in the distribution for making a Win32
B
Bruce Momjian 已提交
533 534
   libpq library and psql.
   
B
Bruce Momjian 已提交
535 536 537 538 539 540 541
   The database server is now working on Windows NT using the Cygnus
   Unix/NT porting library. The only feature missing is dynamic loading
   of user-defined functions/types. See
   http://www.askesis.nl/AskesisPostgresIndex.html for more information.
   
   There is another port using U/Win at
   http://surya.wipro.com/uwin/ported.html.
B
Bruce Momjian 已提交
542 543 544 545 546 547
     _________________________________________________________________
   
Section 3: PostgreSQL Features

  3.1) Does PostgreSQL support nested subqueries?
  
B
Bruce Momjian 已提交
548 549
   Yes, fully supported, but only in the where clause, not in the target
   list.
B
Bruce Momjian 已提交
550
   
B
Bruce Momjian 已提交
551
  3.2) How can I write client applications for PostgreSQL?
B
Bruce Momjian 已提交
552 553
  
   PostgreSQL supports a C-callable library interface called libpq as
B
Bruce Momjian 已提交
554
   well as many others. See the above list of supported languages.
B
Bruce Momjian 已提交
555
   
B
Bruce Momjian 已提交
556
  3.3) How do I set up a pg_group?
B
Bruce Momjian 已提交
557 558 559 560 561 562
  
   Currently, there is no easy interface to set up user groups. You have
   to explicitly insert/update the pg_group table. For example:

        jolly=> insert into pg_group (groname, grosysid, grolist)
        jolly=>     values ('posthackers', '1234', '{5443, 8261}');
B
Bruce Momjian 已提交
563
        INSERT 548224
B
Bruce Momjian 已提交
564
        jolly=> grant insert on foo to group posthackers;
B
Bruce Momjian 已提交
565
        CHANGE
B
Bruce Momjian 已提交
566 567 568
        jolly=>

   The fields in pg_group are:
569
     * groname: the group name. This a name and should be purely
B
Bruce Momjian 已提交
570 571 572 573 574 575
       alphanumeric. Do not include underscores or other punctuation.
     * grosysid: the group id. This is an int4. This should be unique for
       each group.
     * grolist: the list of pg_user id's that belong in the group. This
       is an int4[].
       
B
Bruce Momjian 已提交
576
  3.4) What is the exact difference between binary cursors and normal cursors?
B
Bruce Momjian 已提交
577 578 579
  
   See the declare manual page for a description.
   
B
Bruce Momjian 已提交
580
  3.5) What is an R-tree index and what is it used for?
B
Bruce Momjian 已提交
581 582 583 584
  
   An r-tree index is used for indexing spatial data. A hash index can't
   handle range searches. A B-tree index only handles range searches in a
   single dimension. R-tree's can handle multi-dimensional data. For
B
Bruce Momjian 已提交
585
   example, if an R-tree index can be built on an attribute of type
B
Bruce Momjian 已提交
586
   point, the system can more efficient answer queries like select all
B
Bruce Momjian 已提交
587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602
   points within a bounding rectangle.
   
   The canonical paper that describes the original R-Tree design is:
   
   Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
   Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data,
   45-57.
   
   You can also find this paper in Stonebraker's "Readings in Database
   Systems"
   
   Builtin R-Trees can handle polygons and boxes. In theory, R-trees can
   be extended to handle higher number of dimensions. In practice,
   extending R-trees require a bit of work and we don't currently have
   any documentation on how to do it.
   
B
Bruce Momjian 已提交
603
  3.6) What is the maximum size for a row, table, database?
B
Bruce Momjian 已提交
604
  
B
Bruce Momjian 已提交
605
   Rows are limited to 8K bytes. Taking into account system attributes
B
Bruce Momjian 已提交
606 607 608 609
   and other overhead, one should stay well shy of 8,000 bytes to be on
   the safe side. To use attributes larger than 8K, try using the large
   objects interface.
   
B
Bruce Momjian 已提交
610
   Rows do not cross 8k boundaries so a 5k row will require 8k of
B
Bruce Momjian 已提交
611 612
   storage.
   
B
Bruce Momjian 已提交
613 614 615 616 617
   Table and database sizes are unlimited. There are many databases that
   are tens of gigabytes, and probably some that are hundreds of
   gigabytes.
   
  3.7) My queries are slow or don't make use of the indexes. Why?
B
Bruce Momjian 已提交
618 619
  
   PostgreSQL does not automatically maintain statistics. One has to make
B
Bruce Momjian 已提交
620 621 622
   an explicit vacuum call to update the statistics. After statistics are
   updated, the optimizer knows how many rows in the table, and can
   better decide if it should use indices. Note that the optimizer does
B
Bruce Momjian 已提交
623 624 625 626 627 628 629 630 631
   not use indices in cases when the table is small because a sequential
   scan would be faster.
   
   For column-specific optimization statistics, use vacuum analyze.
   Vacuum analyze is important for complex multi-join queries, so the
   optimizer can estimate the number of rows returned from each table,
   and choose the proper join order. The backend does not keep track of
   column statistics on its own, and vacuum analyze must be run to
   collect them periodically.
B
Bruce Momjian 已提交
632
   
B
Bruce Momjian 已提交
633
   Indexes are not used for order by operations.
B
Bruce Momjian 已提交
634
   
B
Bruce Momjian 已提交
635 636 637 638
   When using wild-card operators like LIKE or ~, indices can only be
   used if the beginning of the search is anchored to the start of the
   string. So, to use indices, LIKE searches can should not begin with %,
   and ~(regular expression searches) should start with ^.
B
Bruce Momjian 已提交
639
   
B
Bruce Momjian 已提交
640
  3.8) How do I do regular expression searches? case-insensitive regexp
B
Bruce Momjian 已提交
641 642
  searching?
  
B
Bruce Momjian 已提交
643
   See psql's \do command.
B
Bruce Momjian 已提交
644
   
B
Bruce Momjian 已提交
645
  3.9) I experienced a server crash during a vacuum. How do I remove the lock
B
Bruce Momjian 已提交
646 647 648 649
  file?
  
   See the vacuum manual page.
   
B
Bruce Momjian 已提交
650
  3.10) What is the difference between the various character types?
B
Bruce Momjian 已提交
651
  
B
Bruce Momjian 已提交
652
Type            Internal Name   Notes
M
Marc G. Fournier 已提交
653
--------------------------------------------------
654
CHAR            char            1 character
B
Bruce Momjian 已提交
655 656
CHAR(#)         bpchar          blank padded to the specified fixed length
VARCHAR(#)      varchar         size specifies maximum length, no padding
B
Bruce Momjian 已提交
657
TEXT            text            length limited only by maximum row length
B
Bruce Momjian 已提交
658
BYTEA           bytea           variable-length array of bytes
B
Bruce Momjian 已提交
659 660 661 662

   You need to use the internal name when doing internal operations.
   
   The last four types above are "varlena" types (i.e. the first four
B
Bruce Momjian 已提交
663
   bytes are the length, followed by the data). char(#) allocates the
B
Bruce Momjian 已提交
664
   maximum number of bytes no matter how much data is stored in the
B
Bruce Momjian 已提交
665
   field. text, varchar(#), and bytea all have variable length on the
B
Bruce Momjian 已提交
666
   disk, and because of this, there is a small performance penalty for
B
Bruce Momjian 已提交
667
   using them. Specifically, the penalty is for access to all columns
B
Bruce Momjian 已提交
668 669
   after the first column of this type.
   
B
Bruce Momjian 已提交
670
  3.11) In a query, how do I detect if a field is NULL?
B
Bruce Momjian 已提交
671 672 673
  
   You test the column with IS NULL and IS NOT NULL.
   
B
Bruce Momjian 已提交
674
  3.12) How do I see how the query optimizer is evaluating my query?
B
Bruce Momjian 已提交
675 676 677
  
   See the explain manual page.
   
B
Bruce Momjian 已提交
678
  3.13) How do I create a serial/auto-incrementing field?
B
Bruce Momjian 已提交
679
  
B
Bruce Momjian 已提交
680 681 682 683 684 685
   PostgreSQL supports a serial data type. It auto-creates a sequence and
   index on the column. See the create_sequence manual page for more
   information about sequences. You can also use each row's oid field as
   a unique value. However, if you need to dump and reload the database,
   you need to use pgdump's -o option or copy with oids option to
   preserve the oids.
B
Bruce Momjian 已提交
686
   
B
Bruce Momjian 已提交
687
  3.14) What are the pg_psort.XXX files in my database directory?
B
Bruce Momjian 已提交
688 689
  
   They are temporary sort files generated by the query executor. For
B
Bruce Momjian 已提交
690
   example, if a sort needs to be done to satisfy an order by, some temp
B
Bruce Momjian 已提交
691 692 693 694 695
   files are generated as a result of the sort.
   
   If you have no transactions or sorts running at the time, it is safe
   to delete the pg_psort.XXX files.
   
B
Bruce Momjian 已提交
696
  3.15) Why can't I connect to my database from another machine?
B
Bruce Momjian 已提交
697 698 699 700
  
   The default configuration allows only unix domain socket connections
   from the local machine. To enable TCP/IP connections, use the
   postmaster -i option You need to add a host entry to the file
B
Bruce Momjian 已提交
701
   pgsql/data/pg_hba. See the pg_hba.conf manual page.
B
Bruce Momjian 已提交
702
   
B
Bruce Momjian 已提交
703
  3.16) How do I find out what indices or operations are defined in the
B
Bruce Momjian 已提交
704 705 706 707 708 709
  database?
  
   psql has a variety of backslash commands to show such information. Use
   \? to see them.
   
   Also try the file pgsql/src/tutorial/syscat.source. It illustrates
B
Bruce Momjian 已提交
710
   many of the selects needed to get information out of the database
B
Bruce Momjian 已提交
711 712
   system tables.
   
B
Bruce Momjian 已提交
713
  3.17) What is an oid? What is a tid?
B
Bruce Momjian 已提交
714
  
B
Bruce Momjian 已提交
715 716 717 718 719 720
   Oids are PostgreSQL's answer to unique row ids. Every row that is
   created in PostgreSQL gets a unique oid. All oids generated during
   initdb are less than 16384 (from backend/access/transam.h). All
   user-created oids are equal or greater that this. By default, all
   these oids are unique not only within a table, or database, but unique
   within the entire PostgreSQL installation.
B
Bruce Momjian 已提交
721
   
B
Bruce Momjian 已提交
722 723
   PostgreSQL uses oids in its internal system tables to link rows
   between tables. These oids can be used to identify specific user rows
B
Bruce Momjian 已提交
724 725 726 727
   and used in joins. It is recommended you use column type oid to store
   oid values. See the sql(l) manual page to see the other internal
   columns. You can create an index on the oid field for faster access.
   
B
Bruce Momjian 已提交
728 729 730 731
   Oids are assigned to all new rows from a central area that is used by
   all databases. If you want to change the oid to something else, or if
   you want to make a copy of the table, with the original oid's, there
   is no reason you can't do it:
B
Bruce Momjian 已提交
732 733 734 735 736
        CREATE TABLE new_table(old_oid oid, mycol int);
        SELECT INTO new SELECT old_oid, mycol FROM old;
        COPY new TO '/tmp/pgtable';
        DELETE FROM new;
        COPY new WITH OIDS FROM '/tmp/pgtable';
B
Bruce Momjian 已提交
737

B
Bruce Momjian 已提交
738 739 740
   Tids are used to identify specific physical rows with block and offset
   values. Tids change after rows are modified or reloaded. They are used
   by index entries to point to physical rows.
B
Bruce Momjian 已提交
741
   
B
Bruce Momjian 已提交
742
  3.18) What is the meaning of some of the terms used in PostgreSQL?
B
Bruce Momjian 已提交
743 744 745 746 747 748 749 750 751 752 753 754 755
  
   Some of the source code and older documentation use terms that have
   more common usage. Here are some:
     * row, record, tuple
     * attribute, field, column
     * table, class
     * retrieve, select
     * replace, update
     * append, insert
     * oid, serial value
     * portal, cursor
     * range variable, table name, table alias
       
B
Bruce Momjian 已提交
756
  3.19) What is Genetic Query Optimization?
B
Bruce Momjian 已提交
757 758 759 760 761 762 763 764
  
   The GEQO module in PostgreSQL is intended to solve the query
   optimization problem of joining many tables by means of a Genetic
   Algorithm (GA). It allows the handling of large join queries through
   non-exhaustive search.
   
   For further information see README.GEQO <utesch@aut.tu-freiberg.de>.
   
B
Bruce Momjian 已提交
765
  3.20) How do you remove a column from a table?
B
Bruce Momjian 已提交
766
  
B
Bruce Momjian 已提交
767
   We do not support alter table drop column, but do this:
B
Bruce Momjian 已提交
768

769
        SELECT ...  -- select all columns but the one you want to remove
B
Bruce Momjian 已提交
770 771 772 773
        INTO TABLE new_table
        FROM old_table;
        DROP TABLE old_table;
        ALTER TABLE new_table RENAME TO old_table;
B
Bruce Momjian 已提交
774

B
Bruce Momjian 已提交
775
  3.21) How do I select only the first few rows of a query?
B
Bruce Momjian 已提交
776 777 778 779 780
  
   See the fetch manual page.
   
   This only prevents all row results from being transfered to the
   client. The entire query must be evaluated, even if you only want just
B
Bruce Momjian 已提交
781 782
   the first few rows. Consider a query that has an order by. There is no
   way to return any rows until the entire query is evaluated and sorted.
B
Bruce Momjian 已提交
783
   
B
Bruce Momjian 已提交
784
  3.22)How much database disk space is required to store data from a typical
B
Bruce Momjian 已提交
785 786 787 788 789
  flat file?
  
   Consider a file with 300,000 lines with two integers on each line. The
   flat file is 2.4MB. The size of the PostgreSQL database file
   containing this data can be estimated:
B
Bruce Momjian 已提交
790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806
40 bytes + each row header (approximate)
 8 bytes + two int fields @ 4 bytes each
 4 bytes + pointer on page to tuple
-------- =
52 bytes per row

The data page size in PostgreSQL is 8192(8k) bytes, so:

8192 bytes per page
-------------------  =  157 rows per database page (rounded up)
 52 bytes per row

300000 data rows
-----------------  =   1911 database pages
157 rows per page

1911 database pages * 8192 bytes per page  =  15,654,912 or 15.5MB
B
Bruce Momjian 已提交
807

B
Bruce Momjian 已提交
808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827

Indexes do not contain as much overhead, but do contain the data that is
being indexed, so they can be large also.

  3.23) How do I get a list of tables, or other things I can see in psql?
  
   See the file pgsql/src/bin/psql/psql.c. It contains SQL commands that
   generate the output for psql's backslash commands.
   
  3.24) Why do I get the error "FATAL: palloc failure: memory exhausted?"
  
   It is possible you have run out of virtual memory on your system, or
   your kernel has a low limit for certain resources. Try this before
   starting the postmaster:

        ulimit -d 65536
        limit datasize 64m

   Depending on your shell, only one of these may succeed, but it will
   set your process data segment limit much higher and perhaps allow the
B
Bruce Momjian 已提交
828 829 830 831
   query to complete. This command applies to the current process, and
   all subprocesses created after the command is run. If are having a
   problem with the SQL client because the backend is returning too much
   data, try it before starting the client.
B
Bruce Momjian 已提交
832 833 834 835
   
  3.25) How do I tell what PostgreSQL version I am running?
  
   From psql, type select version();
B
Bruce Momjian 已提交
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850
     _________________________________________________________________
   
Section 4: Extending PostgreSQL

  4.1) I wrote a user-defined function and when I run it in psql, it dumps
  core.
  
   The problem could be a number of things. Try testing your user-defined
   function in a stand alone test program first. Also, make sure you are
   not sending elog NOTICES when the front-end is expecting data, such as
   during a type_in() or type_out() functions
   
  4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: 0x402251d0 not
  in alloc set!
  
B
Bruce Momjian 已提交
851 852
   You are pfree'ing something that was not palloc'ed. Beware of mixing
   malloc/free and palloc/pfree.
B
Bruce Momjian 已提交
853 854 855 856 857 858 859 860 861
   
  4.3) I've written some nifty new types and functions for PostgreSQL.
  
   Please share them with other PostgreSQL users. Send your extensions to
   mailing list, and they will eventually end up in the contrib/
   subdirectory.
   
  4.4) How do I write a C function to return a tuple?
  
B
Bruce Momjian 已提交
862 863
   This requires extreme wizardry so extreme that the authors have not
   ever tried it, though in principle it can be done.
B
Bruce Momjian 已提交
864 865 866
     _________________________________________________________________
   
Section 5: Bugs
B
Bruce Momjian 已提交
867

B
Bruce Momjian 已提交
868 869 870 871 872
  5.1) How do I make a bug report?
  
   Check the current FAQ at http://postgreSQL.org
   
   Also check out our ftp site ftp://ftp.postgreSQL.org/pub to see if
B
Bruce Momjian 已提交
873
   there is a more recent PostgreSQL version or patches.
B
Bruce Momjian 已提交
874 875
   
   You can also fill out the "bug-template" file and send it to:
B
Bruce Momjian 已提交
876
   bugs@postgreSQL.org