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

                Frequently Asked Questions (FAQ) for PostgreSQL
                                       
B
Bruce Momjian 已提交
4
   Last updated: Fri Jun 2 11:32:13 EDT 2000
B
Bruce Momjian 已提交
5
   
B
Bruce Momjian 已提交
6
   Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
B
Bruce Momjian 已提交
7 8
   
   The most recent version of this document can be viewed at the
B
Bruce Momjian 已提交
9
   postgreSQL Web site, http://www.PostgreSQL.org.
B
Bruce Momjian 已提交
10 11
   
   Linux-specific questions are answered in
B
Bruce Momjian 已提交
12
   http://www.PostgreSQL.org/docs/faq-linux.html.
B
Bruce Momjian 已提交
13
   
B
Bruce Momjian 已提交
14 15 16 17 18 19
   HPUX-specific questions are answered in
   http://www.PostgreSQL.org/docs/faq-hpux.html.
   
   Solaris-specific questions are answered in
   http://www.postgresql.org/docs/faq-solaris.html.
   
B
Bruce Momjian 已提交
20
   Irix-specific questions are answered in
B
Bruce Momjian 已提交
21
   http://www.PostgreSQL.org/docs/faq-irix.html.
B
Bruce Momjian 已提交
22 23
     _________________________________________________________________
   
B
Bruce Momjian 已提交
24
                             General Questions
B
Bruce Momjian 已提交
25
                                      
B
Bruce Momjian 已提交
26
   1.1) What is PostgreSQL?
B
Bruce Momjian 已提交
27 28 29 30 31 32
   1.2) What's the copyright on PostgreSQL?
   1.3) What Unix platforms does PostgreSQL run on?
   1.4) What non-unix ports are available?
   1.5) Where can I get PostgreSQL?
   1.6) Where can I get support for PostgreSQL?
   1.7) What is the latest release of PostgreSQL?
B
Bruce Momjian 已提交
33
   1.8) What documentation is available for PostgreSQL?
B
Bruce Momjian 已提交
34 35 36 37 38 39 40 41
   1.9) How do I find out about known bugs or missing features?
   1.10) How can I learn SQL?
   1.11) Is PostgreSQL Y2K compliant?
   1.12) How do I join the development team?
   1.13) How do I submit a bug report?
   1.14) How does PostgreSQL compare to other DBMS's?
   
                           User Client Questions
B
Bruce Momjian 已提交
42
                                      
B
Bruce Momjian 已提交
43 44 45 46 47 48 49 50 51 52
   2.1) Are there ODBC drivers for PostgreSQL?
   2.2) What tools are available for hooking PostgreSQL to Web pages?
   2.3) Does PostgreSQL have a graphical user interface? A report
   generator? An embedded query language interface?
   2.4) What languages are available to communicate with PostgreSQL?
   
                          Administrative Questions
                                      
   3.1) Why does initdb fail?
   3.2) How do I install PostgreSQL somewhere other than
B
Bruce Momjian 已提交
53
   /usr/local/pgsql?
B
Bruce Momjian 已提交
54
   3.3) When I start the postmaster, I get a Bad System Call or core
B
Bruce Momjian 已提交
55
   dumped message. Why?
B
Bruce Momjian 已提交
56 57 58
   3.4) When I try to start the postmaster, I get IpcMemoryCreate
   errors3. Why?
   3.5) When I try to start the postmaster, I get IpcSemaphoreCreate
B
Bruce Momjian 已提交
59
   errors. Why?
B
Bruce Momjian 已提交
60 61 62 63 64 65 66 67 68 69 70
   3.6) How do I prevent other hosts from accessing my PostgreSQL
   database?
   3.7) Why can't I connect to my database from another machine?
   3.8) Why can't I access the database as the root user?
   3.9) All my servers crash under concurrent table access. Why?
   3.10) How do I tune the database engine for better performance?
   3.11) What debugging features are available in PostgreSQL?
   3.12) I get 'Sorry, too many clients' when trying to connect. Why?
   3.13) What are the pg_psort.XXX files in my database directory?
   
                           Operational Questions
B
Bruce Momjian 已提交
71
                                      
B
Bruce Momjian 已提交
72 73 74
   4.1) The system seems to be confused about commas, decimal points, and
   date formats.
   4.2) What is the exact difference between binary cursors and normal
B
Bruce Momjian 已提交
75
   cursors?
B
Bruce Momjian 已提交
76 77 78 79 80
   4.3) How do I select only the first few rows of a query?
   4.4) How do I get a list of tables, or other things I can see in psql?
   4.5) How do you remove a column from a table?
   4.6) What is the maximum size for a row, table, database?
   4.7) How much database disk space is required to store data from a
B
Bruce Momjian 已提交
81
   typical flat file?
B
Bruce Momjian 已提交
82 83 84 85 86 87 88 89 90 91
   4.8) How do I find out what indices or operations are defined in the
   database?
   4.9) My queries are slow or don't make use of the indexes. Why?
   4.10) How do I see how the query optimizer is evaluating my query?
   4.11) What is an R-tree index?
   4.12) What is Genetic Query Optimization?
   4.13) How do I do regular expression searches and case-insensitive
   regexp searching?
   4.14) In a query, how do I detect if a field is NULL?
   4.15) What is the difference between the various character types?
B
Bruce Momjian 已提交
92 93
   4.16.1) How do I create a serial/auto-incrementing field?
   4.16.2) How do I get the value of a serial insert?
B
Bruce Momjian 已提交
94 95
   4.16.3) Don't currval() and nextval() lead to a race condition with
   other concurrent backend processes?
B
Bruce Momjian 已提交
96 97 98
   4.17) What is an oid? What is a tid?
   4.18) What is the meaning of some of the terms used in PostgreSQL?
   4.19) Why do I get the error "FATAL: palloc failure: memory
B
Bruce Momjian 已提交
99
   exhausted?"
B
Bruce Momjian 已提交
100
   4.20) How do I tell what PostgreSQL version I am running?
B
Bruce Momjian 已提交
101 102 103
   4.21) My large-object operations get invalid large obj descriptor.
   Why?
   4.22) How do I create a column that will default to the current time?
B
Bruce Momjian 已提交
104
   4.23) Why are my subqueries using IN so slow?
B
Bruce Momjian 已提交
105
   4.24) How do I do an outer join?
B
Bruce Momjian 已提交
106
   
B
Bruce Momjian 已提交
107
                            Extending PostgreSQL
B
Bruce Momjian 已提交
108
                                      
B
Bruce Momjian 已提交
109
   5.1) I wrote a user-defined function. When I run it in psql, why does
B
Bruce Momjian 已提交
110
   it dump core?
B
Bruce Momjian 已提交
111 112 113 114 115 116 117
   5.2) What does the message: NOTICE:PortalHeapMemoryFree: 0x402251d0
   not in alloc set! mean?
   5.3) How can I contribute some nifty new types and functions for
   PostgreSQL?
   5.4) How do I write a C function to return a tuple?
   5.5) I have changed a source file. Why does the recompile does not see
   the change?
B
Bruce Momjian 已提交
118 119
     _________________________________________________________________
   
B
Bruce Momjian 已提交
120 121 122 123
                             General Questions
                                      
    1.1) What is PostgreSQL?
    
B
Bruce Momjian 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
   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.
   
B
Bruce Momjian 已提交
148 149
   It is pronounced Post-Gres-Q-L.
   
B
Bruce Momjian 已提交
150 151
    1.2) What's the copyright on PostgreSQL?
    
B
Bruce Momjian 已提交
152 153 154 155
   PostgreSQL is subject to the following COPYRIGHT.
   
   PostgreSQL Data Base Management System
   
B
Bruce Momjian 已提交
156 157
   Portions copyright (c) 1996-2000, PostgreSQL, Inc Portions Copyright
   (c) 1994-6 Regents of the University of California
B
Bruce Momjian 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
   
   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.
   
B
Bruce Momjian 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
    1.3) What Unix platforms does PostgreSQL run on?
    
   The authors have compiled and tested PostgreSQL on the following
   platforms (some of these compiles require gcc):
     * 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)
     * bsdi - BSD/OS 2.x, 3.x, 4.x
     * dgux - DG/UX 5.4R4.11
     * hpux - HP PA-RISC on HP-UX 9.*, 10.*
     * i386_solaris - i386 Solaris
     * irix5 - SGI MIPS on IRIX 5.3
     * linux - Intel i86 Alpha SPARC PPC M68k
     * sco - SCO 3.2v5 Unixware
     * 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.4) What non-unix ports are available?
    
   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.
   
   A file win31.mak is included in the distribution for making a Win32
   libpq library and psql.
   
   The database server is now working on Windows NT using the Cygnus
   Unix/NT porting library. See pgsql/doc/README.NT in the distribution.
   
    1.5) Where can I get PostgreSQL?
    
   The primary anonymous ftp site for PostgreSQL is
   ftp://ftp.postgreSQL.org/pub
   
   For mirror sites, see our main web site.
   
    1.6) Where can I get support for PostgreSQL?
    
B
Bruce Momjian 已提交
219 220
   There is no official support for PostgreSQL from the University of
   California, Berkeley. It is maintained through volunteer effort.
B
Bruce Momjian 已提交
221
   
B
Bruce Momjian 已提交
222
   The main mailing list is: pgsql-general@postgreSQL.org. It is
B
Bruce Momjian 已提交
223 224 225
   available for discussion of matters pertaining to PostgreSQL. To
   subscribe, send a mail with the lines in the body (not the subject
   line)
B
Bruce Momjian 已提交
226 227
        subscribe
        end
B
Bruce Momjian 已提交
228

B
Bruce Momjian 已提交
229
   to pgsql-general-request@postgreSQL.org.
B
Bruce Momjian 已提交
230 231
   
   There is also a digest list available. To subscribe to this list, send
B
Bruce Momjian 已提交
232
   email to: pgsql-general-digest-request@postgreSQL.org with a body of:
B
Bruce Momjian 已提交
233 234
        subscribe
        end
B
Bruce Momjian 已提交
235 236 237 238

   Digests are sent out to members of this list whenever the main list
   has received around 30k of messages.
   
B
Bruce Momjian 已提交
239
   The bugs mailing list is available. To subscribe to this list, send
B
Bruce Momjian 已提交
240
   email to bugs-request@postgreSQL.org with a body of:
B
Bruce Momjian 已提交
241
   
B
Bruce Momjian 已提交
242 243 244
        subscribe
        end

B
Bruce Momjian 已提交
245 246
   There is also a developers discussion mailing list available. To
   subscribe to this list, send email to hackers-request@postgreSQL.org
B
Bruce Momjian 已提交
247
   with a body of:
B
Bruce Momjian 已提交
248
   
B
Bruce Momjian 已提交
249 250
        subscribe
        end
B
Bruce Momjian 已提交
251

B
Bruce Momjian 已提交
252 253
   Additional mailing lists and information about PostgreSQL can be found
   via the PostgreSQL WWW home page at:
B
Bruce Momjian 已提交
254
   
B
Bruce Momjian 已提交
255
     http://www.postgreSQL.org
B
Bruce Momjian 已提交
256
     
B
Bruce Momjian 已提交
257
   There is also an IRC channel on EFNet, channel #PostgreSQL. I use the
B
Bruce Momjian 已提交
258
   unix command irc -c '#PostgreSQL' "$USER" irc.phoenix.net.
B
Bruce Momjian 已提交
259
   
B
Bruce Momjian 已提交
260
   Commercial support for PostgreSQL is available at
B
Bruce Momjian 已提交
261
   http://www.pgsql.com/.
262
   
B
Bruce Momjian 已提交
263 264
    1.7) What is the latest release of PostgreSQL?
    
B
Bruce Momjian 已提交
265
   The latest release of PostgreSQL is version 7.0.2.
B
Bruce Momjian 已提交
266
   
B
Bruce Momjian 已提交
267
   We plan to have major releases every four months.
B
Bruce Momjian 已提交
268
   
B
Bruce Momjian 已提交
269 270
    1.8) What documentation is available for PostgreSQL?
    
B
Bruce Momjian 已提交
271
   Several manuals, manual pages, and some small test examples are
B
Bruce Momjian 已提交
272 273 274 275 276 277
   included in the distribution. See the /doc directory. You can also
   browse the manual on-line at http://www.postgresql.org/docs/postgres.
   in the distribution.
   
   There is a PostgreSQL book availiable at
   http://www.postgresql.org/docs/awbook.html
B
Bruce Momjian 已提交
278 279 280
   
   psql has some nice \d commands to show information about types,
   operators, functions, aggregates, etc.
B
Bruce Momjian 已提交
281
   
B
Bruce Momjian 已提交
282 283 284 285 286 287 288 289 290
   The web site contains even more documentation.
   
    1.9) How do I find out about known bugs or missing features?
    
   PostgreSQL supports an extended subset of SQL-92. See our TODO for a
   list of known bugs, missing features, and future plans.
   
    1.10) How can I learn SQL?
    
B
Bruce Momjian 已提交
291 292 293 294
   The PostgreSQL book at http://www.postgresql.org/docs/awbook.html
   teaches SQL. There is a nice tutorial at
   http://w3.one.net/~jhoffman/sqltut.htm and at
   http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM.
B
Bruce Momjian 已提交
295 296 297
   
   Another one is "Teach Yourself SQL in 21 Days, Second Edition" at
   http://members.tripod.com/er4ebus/sql/index.htm 
B
Bruce Momjian 已提交
298 299
   
   Many of our users like The Practical SQL Handbook, Bowman et al.,
B
Bruce Momjian 已提交
300 301
   Addison Wesley. Others like The Complete Reference SQL, Groff et al.,
   McGraw-Hill.
B
Bruce Momjian 已提交
302 303 304 305
   
    1.11) Is PostgreSQL Y2K compliant?
    
   Yes, we easily handle dates past the year 2000AD, and before 2000BC.
B
Bruce Momjian 已提交
306
   
B
Bruce Momjian 已提交
307 308 309 310 311 312
    1.12) How do I join the development team?
    
   First, download the latest sources and read the PostgreSQL Developers
   documentation on our web site, or in the distribution. Second,
   subscribe to the pgsql-hackers and pgsql-patches mailing lists. Third,
   submit high-quality patches to pgsql-patches.
B
Bruce Momjian 已提交
313
   
B
Bruce Momjian 已提交
314
   There are about a dozen people who have commit privileges to the
B
Bruce Momjian 已提交
315 316 317 318
   PostgreSQL CVS archive. All of them have submitted so many
   high-quality patches that it was a pain for the existing committers to
   keep up, and we had confidence that patches they committed were likely
   to be of high quality.
B
Bruce Momjian 已提交
319
   
B
Bruce Momjian 已提交
320 321 322
    1.13) How do I submit a bug report?
    
   Fill out the "bug-template" file and send it to: bugs@postgreSQL.org
B
Bruce Momjian 已提交
323
   
B
Bruce Momjian 已提交
324 325 326 327 328 329 330 331 332 333
   Also check out our ftp site ftp://ftp.postgreSQL.org/pub to see if
   there is a more recent PostgreSQL version or patches.
   
    1.14) How does PostgreSQL compare to other DBMS's?
    
   There are several ways of measuring software: features, performance,
   reliability, support, and price.
   
   Features
          PostgreSQL has most features present in large commercial
B
Bruce Momjian 已提交
334 335 336 337 338
          DBMS's, like transactions, subselects, triggers, views, foreign
          key referential integrity, and sophisticated locking. We have
          some features they don't have, like user-defined types,
          inheritance, rules, and multi-version concurrency control to
          reduce lock contention. We don't have outer joins, but are
B
Bruce Momjian 已提交
339 340 341 342 343
          working on them for our next release.
          
   Performance
          PostgreSQL runs in two modes. Normal fsync mode flushes every
          completed transaction to disk, guaranteeing that if the OS
B
Bruce Momjian 已提交
344
          crashes or loses power in the next few seconds, all your data
B
Bruce Momjian 已提交
345 346 347 348 349 350
          is safely stored on disk. In this mode, we are slower than most
          commercial databases, partly because few of them do such
          conservative flushing to disk in their default modes. In
          no-fsync mode, we are usually faster than commercial databases,
          though in this mode, an OS crash could cause data corruption.
          We are working to provide an intermediate mode that suffers
B
Bruce Momjian 已提交
351 352 353
          less performance overhead than full fsync mode, and will allow
          data integrity within 30 seconds of an OS crash. The mode is
          select-able by the database administrator.
B
Bruce Momjian 已提交
354
          In comparison to MySQL or leaner database systems, we are
B
Bruce Momjian 已提交
355 356 357 358
          slower on inserts/updates because we have transaction overhead.
          Of course, MySQL doesn't have any of the features mentioned in
          the Features section above. We are built for flexibility and
          features, though we continue to improve performance through
B
Bruce Momjian 已提交
359 360 361
          profiling and source code analysis. There is an interesting web
          page comparing PostgreSQL to MySQL at
          http://openacs.org/why-not-mysql.html
B
Bruce Momjian 已提交
362 363 364 365
          We handle each user connection by creating a Unix process.
          Backend processes share data buffers and locking information.
          With multiple CPU's, multiple backends can easily run on
          different CPU's.
B
Bruce Momjian 已提交
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
          
   Reliability
          We realize that a DBMS must be reliable, or it is worthless. We
          strive to release well-tested, stable code that has a minimum
          of bugs. Each release has at least one month of beta testing,
          and our release history shows that we can provide stable, solid
          releases that are ready for production use. We believe we
          compare favorably to other database software in this area.
          
   Support
          Our mailing list provides a large group of developers and users
          to help resolve any problems encountered. While we can not
          guarantee a fix, commercial DBMS's don't always supply a fix
          either. Direct access to developers, the user community,
          manuals, and the source code often make PostgreSQL support
          superior to other DBMS's. There is commercial per-incident
          support available for those who need it. (See support FAQ
          item.)
          
   Price
          We are free for all use, both commercial and non-commercial.
          You can add our code to your product with no limitations,
          except those outlined in our BSD-style license stated above.
     _________________________________________________________________
B
Bruce Momjian 已提交
390
   
B
Bruce Momjian 已提交
391 392 393 394
                           User Client Questions
                                      
    2.1) Are there ODBC drivers for PostgreSQL?
    
B
Bruce Momjian 已提交
395
   There are two ODBC drivers available, PsqlODBC and OpenLink ODBC.
B
Bruce Momjian 已提交
396
   
B
Bruce Momjian 已提交
397 398
   PsqlODBC is included in the distribution. More information about it
   can be gotten from: ftp://ftp.postgresql.org/pub/odbc/index.html
B
Bruce Momjian 已提交
399
   
B
Bruce Momjian 已提交
400 401 402 403 404 405
   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 已提交
406 407 408
   commercial-quality support, but a freeware version will always be
   available. Questions to postgres95@openlink.co.uk.
   
B
Bruce Momjian 已提交
409 410
   See also the ODBC chapter of the Programmer's Guide.
   
B
Bruce Momjian 已提交
411 412
    2.2) What tools are available for hooking PostgreSQL to Web pages?
    
B
Bruce Momjian 已提交
413 414 415
   A nice introduction to Database-backed Web pages can be seen at:
   http://www.webtools.com
   
B
Bruce Momjian 已提交
416 417 418 419
   There is also one at http://www.phone.net/home/mwm/hotlist/.
   
   For web integration, PHP is an excellent interface. It is at:
   http://www.php.net
B
Bruce Momjian 已提交
420
   
B
Bruce Momjian 已提交
421 422
   PHP is great for simple stuff, but for more complex cases, many use
   the perl interface and CGI.pm.
B
Bruce Momjian 已提交
423
   
B
Bruce Momjian 已提交
424
   A WWW gateway based on WDB using perl can be downloaded from
B
Bruce Momjian 已提交
425 426
   http://www.eol.ists.ca/~dunlop/wdb-p95
   
B
Bruce Momjian 已提交
427 428 429
    2.3) Does PostgreSQL have a graphical user interface? A report generator?
    An embedded query language interface?
    
B
Bruce Momjian 已提交
430
   We have a nice graphical user interface called pgaccess, which is
B
Bruce Momjian 已提交
431
   shipped as part of the distribution. Pgaccess also has a report
B
Bruce Momjian 已提交
432
   generator. The web page is http://www.flex.ro/pgaccess
B
Bruce Momjian 已提交
433
   
B
Bruce Momjian 已提交
434 435
   We also include ecpg, which is an embedded SQL query language
   interface for C.
B
Bruce Momjian 已提交
436
   
B
Bruce Momjian 已提交
437 438
    2.4) What languages are available to communicate with PostgreSQL?
    
B
Bruce Momjian 已提交
439
   We have:
B
Bruce Momjian 已提交
440 441 442 443 444 445 446 447
     * C(libpq)
     * C++(libpq++)
     * Embedded C(ecpg)
     * Java(jdbc)
     * Perl(perl5)
     * ODBC(odbc)
     * Python(PyGreSQL)
     * TCL(libpgtcl)
B
Bruce Momjian 已提交
448
     * C Easy API(libpgeasy)
B
Bruce Momjian 已提交
449
     * Embedded HTML(PHP from http://www.php.net)
B
Bruce Momjian 已提交
450 451
     _________________________________________________________________
   
B
Bruce Momjian 已提交
452 453 454 455
                          Administrative Questions
                                      
    3.1) Why does initdb fail?
    
B
Bruce Momjian 已提交
456
   Try these:
B
Bruce Momjian 已提交
457
     * check that you don't have any of the previous version's binaries
B
Bruce Momjian 已提交
458
       in your path
B
Bruce Momjian 已提交
459
     * check to see that you have the proper paths set
B
Bruce Momjian 已提交
460
     * check that the postgres user owns the proper files
B
Bruce Momjian 已提交
461
       
B
Bruce Momjian 已提交
462 463
    3.2) How do I install PostgreSQL somewhere other than /usr/local/pgsql?
    
B
Bruce Momjian 已提交
464 465 466 467
   The simplest way is to specify the --prefix option when running
   configure. If you forgot to do that, you can edit Makefile.global and
   change POSTGRESDIR accordingly, or create a Makefile.custom and define
   POSTGRESDIR there.
B
Bruce Momjian 已提交
468
   
B
Bruce Momjian 已提交
469 470 471
    3.3) When I start the postmaster, I get a Bad System Call or core dumped
    message. Why?
    
B
Bruce Momjian 已提交
472
   It could be a variety of problems, but first check to see that you
B
Bruce Momjian 已提交
473
   have System V extensions installed in your kernel. PostgreSQL requires
B
Bruce Momjian 已提交
474
   kernel support for shared memory and semaphores.
B
Bruce Momjian 已提交
475
   
B
Bruce Momjian 已提交
476 477
    3.4) When I try to start the postmaster, I get IpcMemoryCreate errors. Why?
    
B
Bruce Momjian 已提交
478 479 480
   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 已提交
481 482 483
   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 已提交
484
   
B
Bruce Momjian 已提交
485 486 487 488 489 490 491 492 493 494 495 496 497
    3.5) 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.
B
Bruce Momjian 已提交
498
   
B
Bruce Momjian 已提交
499 500
    3.6) How do I prevent other hosts from accessing my PostgreSQL database?
    
B
Bruce Momjian 已提交
501
   By default, PostgreSQL only allows connections from the local machine
B
Bruce Momjian 已提交
502
   using Unix domain sockets. Other machines will not be able to connect
B
Bruce Momjian 已提交
503 504
   unless you add the -i flag to the postmaster, and enable host-based
   authentication by modifying the file $PGDATA/pg_hba.conf accordingly.
B
Bruce Momjian 已提交
505
   This will allow TCP/IP connections.
B
Bruce Momjian 已提交
506
   
B
Bruce Momjian 已提交
507 508 509 510 511 512 513 514 515 516
    3.7) Why can't I connect to my database from another machine?
    
   The default configuration allows only unix domain socket connections
   from the local machine. To enable TCP/IP connections, make sure the
   postmaster has been started with the -i option, and add an appropriate
   host entry to the file pgsql/data/pg_hba.conf. See the pg_hba.conf
   manual page.
   
    3.8) Why can't I access the database as the root user?
    
B
Bruce Momjian 已提交
517
   You should not create database users with user id 0 (root). They will
B
Bruce Momjian 已提交
518 519 520 521
   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.
   
B
Bruce Momjian 已提交
522 523
    3.9) All my servers crash under concurrent table access. Why?
    
B
Bruce Momjian 已提交
524 525 526
   This problem can be caused by a kernel that is not configured to
   support semaphores.
   
B
Bruce Momjian 已提交
527 528
    3.10) How do I tune the database engine for better performance?
    
B
Bruce Momjian 已提交
529
   Certainly, indices can speed up queries. The EXPLAIN command allows
B
Bruce Momjian 已提交
530 531 532
   you to see how PostgreSQL is interpreting your query, and which
   indices are being used.
   
B
Bruce Momjian 已提交
533 534 535
   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 已提交
536
   transaction block are considered to be in their own transaction.
B
Bruce Momjian 已提交
537 538
   Consider performing several statements in a single transaction block.
   This reduces the transaction overhead. Also consider dropping and
B
Bruce Momjian 已提交
539
   recreating indices when making large data changes.
B
Bruce Momjian 已提交
540 541
   
   There are several tuning things that can be done. You can disable
B
Bruce Momjian 已提交
542
   fsync() by starting the postmaster with a -o -F option. This will
B
Bruce Momjian 已提交
543
   prevent fsync()'s from flushing to disk after every transaction.
B
Bruce Momjian 已提交
544 545
   
   You can also use the postmaster -B option to increase the number of
B
Bruce Momjian 已提交
546
   shared memory buffers used by the backend processes. If you make this
B
Bruce Momjian 已提交
547 548 549
   parameter too high, the postmaster may not start up because you've
   exceeded your kernel's limit on shared memory space. Each buffer is 8K
   and the default is 64 buffers.
B
Bruce Momjian 已提交
550
   
B
Bruce Momjian 已提交
551
   You can also use the backend -S option to increase the maximum amount
B
Bruce Momjian 已提交
552 553
   of memory used by the backend process for temporary sorts. The -S
   value is measured in kilobytes, and the default is 512 (ie, 512K).
B
Bruce Momjian 已提交
554
   
B
Bruce Momjian 已提交
555
   You can also use the CLUSTER command to group data in base tables to
B
Bruce Momjian 已提交
556 557
   match an index. See the cluster(l) manual page for more details.
   
B
Bruce Momjian 已提交
558 559
    3.11) What debugging features are available in PostgreSQL?
    
B
Bruce Momjian 已提交
560 561 562
   PostgreSQL has several features that report status information that
   can be valuable for debugging purposes.
   
B
Bruce Momjian 已提交
563
   First, by running configure with the --enable-cassert option, many
B
Bruce Momjian 已提交
564 565 566 567 568 569
   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 已提交
570
        cd /usr/local/pgsql
B
Bruce Momjian 已提交
571 572 573
        ./bin/postmaster >server.log 2>&1 &

   This will put a server.log file in the top-level PostgreSQL directory.
B
Bruce Momjian 已提交
574
   This file contains useful information about problems or errors
B
Bruce Momjian 已提交
575 576
   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 已提交
577
   that specifies the debug level. Be warned that high debug level values
B
Bruce Momjian 已提交
578
   generate large log files.
B
Bruce Momjian 已提交
579
   
B
Bruce Momjian 已提交
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595
   If the postmaster is not running, you can actually run the postgres
   backend from the command line, and type your SQL statement directly.
   This is recommended only for 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.
   
   If the postmaster is running, start psql in one window, then find the
   PID of the postgres process used by psql. Use a debugger to attach to
   the postgres PID. You can set breakpoints in the debugger and issue
   queries from psql. If you are debugging postgres startup, you can set
   PGOPTIONS="-W n", then start psql. This will cause startup to delay
   for n seconds so you can attach with the debugger and trace through
   the startup sequence.
B
Bruce Momjian 已提交
596
   
B
Bruce Momjian 已提交
597 598
   The postgres program has -s, -A, and -t options that can be very
   useful for debugging and performance measurements.
B
Bruce Momjian 已提交
599 600 601 602
   
   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
B
Bruce Momjian 已提交
603
   in the client's current directory.
B
Bruce Momjian 已提交
604
   
B
Bruce Momjian 已提交
605 606
    3.12) I get 'Sorry, too many clients' when trying to connect. Why?
    
B
Bruce Momjian 已提交
607 608 609
   You need to increase the postmaster's limit on how many concurrent
   backend processes it can start.
   
B
Bruce Momjian 已提交
610
   In PostgreSQL 6.5 and up, the default limit is 32 processes. You can
B
Bruce Momjian 已提交
611 612 613 614 615 616 617 618 619 620 621 622 623 624 625
   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 must also increase -B
   beyond its default of 64; -B must be at least twice -N, and probably
   should be more than that for best performance. 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
B
Bruce Momjian 已提交
626
   that PostgreSQL has a limit on the number of allowed backend processes
B
Bruce Momjian 已提交
627
   is so that you can ensure that your system won't run out of resources.
B
Bruce Momjian 已提交
628
   
B
Bruce Momjian 已提交
629 630 631
   In PostgreSQL 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.
B
Bruce Momjian 已提交
632
   
B
Bruce Momjian 已提交
633 634 635
    3.13) What are the pg_tempNNN.NN files in my database directory?
    
   They are temporary files generated by the query executor. For example,
B
Bruce Momjian 已提交
636
   if a sort needs to be done to satisfy an ORDER BY, and the sort
B
Bruce Momjian 已提交
637 638
   requires more space than the backend's -S parameter allows, then temp
   files are created to hold the extra data.
B
Bruce Momjian 已提交
639
   
B
Bruce Momjian 已提交
640 641 642 643
   The temp files should go away automatically, but might not if a
   backend crashes during a sort. If you have no transactions running at
   the time, it is safe to delete the pg_tempNNN.NN files.
     _________________________________________________________________
B
Bruce Momjian 已提交
644
   
B
Bruce Momjian 已提交
645 646 647 648 649 650 651 652 653
                           Operational Questions
                                      
    4.1) The system seems to be confused about commas, decimal points, and date
    formats.
    
   Check your locale configuration. PostgreSQL uses the locale settings
   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 已提交
654
   
B
Bruce Momjian 已提交
655 656 657
    4.2) What is the exact difference between binary cursors and normal
    cursors?
    
B
Bruce Momjian 已提交
658
   See the DECLARE manual page for a description.
B
Bruce Momjian 已提交
659
   
B
Bruce Momjian 已提交
660
    4.3) How do I SELECT only the first few rows of a query?
B
Bruce Momjian 已提交
661
    
B
Bruce Momjian 已提交
662
   See the FETCH manual page, or use SELECT ... LIMIT....
B
Bruce Momjian 已提交
663
   
B
Bruce Momjian 已提交
664 665 666 667 668
   The entire query may have to be evaluated, even if you only want the
   first few rows. Consider a query that has an ORDER BY. If there is an
   index that matches the ORDER BY, PostgreSQL may be able to evaluate
   only the first few records requested, or the entire query may have to
   be evaluated until the desired rows have been generated.
B
Bruce Momjian 已提交
669
   
B
Bruce Momjian 已提交
670 671 672 673
    4.4) How do I get a list of tables, or other information I see in psql?
    
   You can read the source code for psql, file pgsql/src/bin/psql/psql.c.
   It contains SQL commands that generate the output for psql's backslash
B
Bruce Momjian 已提交
674 675
   commands. You can also start psql with the -E option so that it will
   print out the queries it uses to execute the commands you give.
B
Bruce Momjian 已提交
676
   
B
Bruce Momjian 已提交
677 678
    4.5) How do you remove a column from a table?
    
B
Bruce Momjian 已提交
679
   We do not support ALTER TABLE DROP COLUMN, but do this:
B
Bruce Momjian 已提交
680 681 682 683 684 685 686 687
        SELECT ...  -- select all columns but the one you want to remove
        INTO TABLE new_table
        FROM old_table;
        DROP TABLE old_table;
        ALTER TABLE new_table RENAME TO old_table;

    4.6) What is the maximum size for a row, table, database?
    
B
Bruce Momjian 已提交
688 689 690 691 692 693 694 695 696 697
   These are the limits:
Maximum size for a database?             unlimited (60GB databases exist)
Maximum size for a table?                unlimited on all operating systems
Maximum size for a row?                  8k, configurable to 32k
Maximum number of rows in a table?       unlimited
Maximum number of columns table?         unlimited
Maximum number of indexes on a table?    unlimited

   Of course, these are not actually unlimited, but limited to available
   disk space.
B
Bruce Momjian 已提交
698
   
B
Bruce Momjian 已提交
699 700 701
   To change the maximum row size, edit include/config.h and change
   BLCKSZ. To use attributes larger than 8K, you can also use the large
   object interface.
B
Bruce Momjian 已提交
702
   
B
Bruce Momjian 已提交
703
   Row length limit will be removed in 7.1.
B
Bruce Momjian 已提交
704 705 706 707
   
    4.7)How much database disk space is required to store data from a typical
    flat file?
    
B
Bruce Momjian 已提交
708
   A PostgreSQL database can require about six and a half times the disk
B
Bruce Momjian 已提交
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741
   space required to store the data in a flat file.
   
   Consider a file of 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 at 14MB:
    36 bytes: each row header (approximate)
   + 8 bytes: two int fields @ 4 bytes each
   + 4 bytes: pointer on page to tuple
   ----------------------------------------
    48 bytes per row

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

   8192 bytes per page
   -------------------   =  171 rows per database page (rounded up)
     48 bytes per row

   300000 data rows
   --------------------  =  1755 database pages
      171 rows per page

1755 database pages * 8192 bytes per page  =  14,376,960 bytes (14MB)

   Indexes do not contain as much overhead, but do contain the data that
   is being indexed, so they can be large also.
   
    4.8) How do I find out what indices or operations are defined in the
    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 已提交
742
   many of the SELECTs needed to get information from the database system
B
Bruce Momjian 已提交
743
   tables.
B
Bruce Momjian 已提交
744
   
B
Bruce Momjian 已提交
745 746
    4.9) My queries are slow or don't make use of the indexes. Why?
    
B
Bruce Momjian 已提交
747
   PostgreSQL does not automatically maintain statistics. One has to make
B
Bruce Momjian 已提交
748
   an explicit VACUUM call to update the statistics. After statistics are
B
Bruce Momjian 已提交
749 750
   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 已提交
751 752 753
   not use indices in cases when the table is small because a sequential
   scan would be faster.
   
B
Bruce Momjian 已提交
754 755
   For column-specific optimization statistics, use VACUUM ANALYZE.
   VACUUM ANALYZE is important for complex multi-join queries, so the
B
Bruce Momjian 已提交
756 757
   optimizer can estimate the number of rows returned from each table,
   and choose the proper join order. The backend does not keep track of
B
Bruce Momjian 已提交
758
   column statistics on its own, so VACUUM ANALYZE must be run to collect
B
Bruce Momjian 已提交
759
   them periodically.
B
Bruce Momjian 已提交
760
   
B
Bruce Momjian 已提交
761 762 763
   Indexes are usually not used for ORDER BY operations: a sequential
   scan followed by an explicit sort is faster than an indexscan of all
   tuples of a large table, because it takes fewer disk accesses.
B
Bruce Momjian 已提交
764
   
B
Bruce Momjian 已提交
765
   When using wild-card operators such as LIKE or ~, indices can only be
B
Bruce Momjian 已提交
766
   used if the beginning of the search is anchored to the start of the
B
Bruce Momjian 已提交
767 768
   string. So, to use indices, LIKE searches should not begin with %, and
   ~(regular expression searches) should start with ^.
B
Bruce Momjian 已提交
769
   
B
Bruce Momjian 已提交
770 771
    4.10) How do I see how the query optimizer is evaluating my query?
    
B
Bruce Momjian 已提交
772
   See the EXPLAIN manual page.
B
Bruce Momjian 已提交
773 774 775
   
    4.11) What is an R-tree index?
    
B
Bruce Momjian 已提交
776
   An R-tree index is used for indexing spatial data. A hash index can't
B
Bruce Momjian 已提交
777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804
   handle range searches. A B-tree index only handles range searches in a
   single dimension. R-tree's can handle multi-dimensional data. For
   example, if an R-tree index can be built on an attribute of type
   point, the system can more efficient answer queries like select all
   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.
   
    4.12) What is Genetic Query Optimization?
    
   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 the documentation.
B
Bruce Momjian 已提交
805
   
B
Bruce Momjian 已提交
806 807 808
    4.13) How do I do regular expression searches and case-insensitive regexp
    searching?
    
B
Bruce Momjian 已提交
809 810 811 812 813 814
   The ~ operator does regular-expression matching, and ~* does
   case-insensitive regular-expression matching. There is no
   case-insensitive variant of the LIKE operator, but you can get the
   effect of case-insensitive LIKE with this:
        WHERE lower(textfield) LIKE lower(pattern)

B
Bruce Momjian 已提交
815 816 817 818 819 820
    4.14) In a query, how do I detect if a field is NULL?
    
   You test the column with IS NULL and IS NOT NULL.
   
    4.15) What is the difference between the various character types?
    
B
Bruce Momjian 已提交
821
Type            Internal Name   Notes
M
Marc G. Fournier 已提交
822
--------------------------------------------------
B
Bruce Momjian 已提交
823
"char"          char            1 character
B
Bruce Momjian 已提交
824 825
CHAR(#)         bpchar          blank padded to the specified fixed length
VARCHAR(#)      varchar         size specifies maximum length, no padding
B
Bruce Momjian 已提交
826
TEXT            text            length limited only by maximum row length
B
Bruce Momjian 已提交
827
BYTEA           bytea           variable-length array of bytes
B
Bruce Momjian 已提交
828

B
Bruce Momjian 已提交
829 830
   You will see the internal name when examining system catalogs and in
   some error messages.
B
Bruce Momjian 已提交
831 832
   
   The last four types above are "varlena" types (i.e. the first four
B
Bruce Momjian 已提交
833
   bytes are the length, followed by the data). char(#) allocates the
B
Bruce Momjian 已提交
834
   maximum number of bytes no matter how much data is stored in the
B
Bruce Momjian 已提交
835
   field. text, varchar(#), and bytea all have variable length on the
B
Bruce Momjian 已提交
836
   disk, and because of this, there is a small performance penalty for
B
Bruce Momjian 已提交
837
   using them. Specifically, the penalty is for access to all columns
B
Bruce Momjian 已提交
838 839
   after the first column of this type.
   
B
Bruce Momjian 已提交
840 841 842
    4.16.1) How do I create a serial/auto-incrementing field?
    
   PostgreSQL supports SERIAL data type. It auto-creates a sequence and
B
Bruce Momjian 已提交
843
   index on the column. For example, this:
B
Bruce Momjian 已提交
844 845 846 847 848
        CREATE TABLE person (
                id   SERIAL,
                name TEXT
        );

B
Bruce Momjian 已提交
849
   is automatically translated into this:
B
Bruce Momjian 已提交
850 851 852 853 854 855 856 857 858 859 860 861
        CREATE SEQUENCE person_id_seq;
        CREATE TABLE person (
                id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
                name TEXT
        );
        CREATE UNIQUE INDEX person_id_key ON person ( id );

   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
   pg_dump's -o option or COPY WITH OIDS option to preserve the oids.
   
B
Bruce Momjian 已提交
862
   Numbering Rows.
B
Bruce Momjian 已提交
863 864
   
    4.16.2) How do I get the back the generated SERIAL value after an insert?
B
Bruce Momjian 已提交
865
    
B
Bruce Momjian 已提交
866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889
   Probably the simplest approach is to to retrieve the next SERIAL value
   from the sequence object with the nextval() function before inserting
   and then insert it explicitly. Using the example table in 4.16.1, that
   might look like this:
        $newSerialID = nextval('person_id_seq');
        INSERT INTO person (id, name) VALUES ($newSerialID, 'Blaise Pascal');

   You would then also have the new value stored in $newSerialID for use
   in other queries (e.g., as a foreign key to the person table). Note
   that the name of the automatically-created SEQUENCE object will be
   named <table>_<serialcolumn>_seq, where table and serialcolumn are the
   names of your table and your SERIAL column, respectively.
   
   Similarly, you could retrieve the just-assigned SERIAL value with the
   currval() function after it was inserted by default, e.g.,
        INSERT INTO person (name) VALUES ('Blaise Pascal');
        $newID = currval('person_id_seq');

   Finally, you could use the oid returned from the INSERT statement to
   lookup the default value, though this is probably the least portable
   approach. In perl, using DBI with Edmund Mergl's DBD::Pg module, the
   oid value is made available via $sth->{pg_oid_status} after
   $sth->execute().
   
B
Bruce Momjian 已提交
890 891
    4.16.3) Don't currval() and nextval() lead to a race condition with other
    concurrent backend processes?
B
Bruce Momjian 已提交
892 893
    
   No. That has been handled by the backends.
B
Bruce Momjian 已提交
894
   
B
Bruce Momjian 已提交
895 896
    4.17) What is an oid? What is a tid?
    
B
Bruce Momjian 已提交
897 898 899 900 901 902
   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 已提交
903
   
B
Bruce Momjian 已提交
904 905
   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 已提交
906 907 908 909
   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 已提交
910 911 912 913
   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 已提交
914 915 916 917 918
        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 已提交
919

B
Bruce Momjian 已提交
920 921 922
   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 已提交
923
   
B
Bruce Momjian 已提交
924 925
    4.18) What is the meaning of some of the terms used in PostgreSQL?
    
B
Bruce Momjian 已提交
926 927
   Some of the source code and older documentation use terms that have
   more common usage. Here are some:
B
Bruce Momjian 已提交
928
     * table, relation, class
B
Bruce Momjian 已提交
929
     * row, record, tuple
B
Bruce Momjian 已提交
930
     * column, field, attribute
B
Bruce Momjian 已提交
931 932 933 934 935 936 937
     * retrieve, select
     * replace, update
     * append, insert
     * oid, serial value
     * portal, cursor
     * range variable, table name, table alias
       
B
Bruce Momjian 已提交
938 939
    4.19) Why do I get the error "FATAL: palloc failure: memory exhausted?"
    
B
Bruce Momjian 已提交
940 941 942 943 944 945 946 947
   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 已提交
948
   query to complete. This command applies to the current process, and
B
Bruce Momjian 已提交
949
   all subprocesses created after the command is run. If you are having a
B
Bruce Momjian 已提交
950 951
   problem with the SQL client because the backend is returning too much
   data, try it before starting the client.
B
Bruce Momjian 已提交
952
   
B
Bruce Momjian 已提交
953 954
    4.20) How do I tell what PostgreSQL version I am running?
    
B
Bruce Momjian 已提交
955
   From psql, type select version();
B
Bruce Momjian 已提交
956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973
   
    4.21) My large-object operations get invalid large obj descriptor. Why?
    
   You need to put BEGIN WORK and COMMIT around any use of a large object
   handle, that is, surrounding lo_open ... lo_close.
   
   Current PostgreSQL enforces the rule by closing large object handles
   at transaction commit, which will be instantly upon completion of the
   lo_open command if you are not inside a transaction. So the first
   attempt to do anything with the handle will draw invalid large obj
   descriptor. So code that used to work (at least most of the time) will
   now generate that error message if you fail to use a transaction.
   
   If you are using a client interface like ODBC you may need to set
   auto-commit off.
   
    4.22) How do I create a column that will default to the current time?
    
B
Bruce Momjian 已提交
974
   Use now():
B
Bruce Momjian 已提交
975 976 977 978 979 980 981 982 983 984 985 986 987 988 989
        CREATE TABLE test (x int, modtime timestamp default now() );

    4.23) Why are my subqueries using IN so slow?
    
   Currently, we join subqueries to outer queries by sequential scanning
   the result of the subquery for each row of the outer query. A
   workaround is to replace IN with EXISTS. For example, change:
        SELECT *
        FROM tab
        WHERE col1 IN (SELECT col2 FROM TAB2)

   to:
        SELECT *
        FROM tab
        WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
B
Bruce Momjian 已提交
990

B
Bruce Momjian 已提交
991
   We hope to fix this limitation in a future release.
B
Bruce Momjian 已提交
992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006
   
    4.24) How do I do an outer join?
    
   PostgreSQL does not support outer joins in the current release. They
   can be simulated using UNION and NOT IN. For example, when joining
   tab1 and tab2, the following query does an outer join of the two
   tables:
        SELECT tab1.col1, tab2.col2
        FROM tab1, tab2
        WHERE tab1.col1 = tab2.col1
        UNION ALL
        SELECT tab1.col1, NULL
        FROM tab1
        WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
        ORDER BY tab1.col1
B
Bruce Momjian 已提交
1007 1008
     _________________________________________________________________
   
B
Bruce Momjian 已提交
1009 1010 1011 1012 1013
                            Extending PostgreSQL
                                      
    5.1) I wrote a user-defined function. When I run it in psql, why does it
    dump core?
    
B
Bruce Momjian 已提交
1014
   The problem could be a number of things. Try testing your user-defined
B
Bruce Momjian 已提交
1015
   function in a stand alone test program first.
B
Bruce Momjian 已提交
1016
   
B
Bruce Momjian 已提交
1017 1018 1019
    5.2) What does the message: NOTICE:PortalHeapMemoryFree: 0x402251d0 not in
    alloc set! mean?
    
B
Bruce Momjian 已提交
1020 1021
   You are pfree'ing something that was not palloc'ed. Beware of mixing
   malloc/free and palloc/pfree.
B
Bruce Momjian 已提交
1022
   
B
Bruce Momjian 已提交
1023 1024 1025 1026 1027
    5.3) How can I contribute some nifty new types and functions for
    PostgreSQL?
    
   Send your extensions to the pgsql-hackers mailing list, and they will
   eventually end up in the contrib/ subdirectory.
B
Bruce Momjian 已提交
1028
   
B
Bruce Momjian 已提交
1029 1030 1031 1032
    5.4) How do I write a C function to return a tuple?
    
   This requires wizardry so extreme that the authors have never tried
   it, though in principle it can be done.
B
Bruce Momjian 已提交
1033
   
B
Bruce Momjian 已提交
1034 1035 1036 1037
    5.5) I have changed a source file. Why does the recompile does not see the
    change?
    
   The Makefiles do not have the proper dependencies for include files.
B
Bruce Momjian 已提交
1038 1039
   You have to do a make clean and then another make. You have to do a
   make clean and then another make.