Move FAQ source into main cvs tree.
This commit is contained in:
parent
9f442cbf13
commit
d800532536
1268
doc/src/FAQ/FAQ.html
Normal file
1268
doc/src/FAQ/FAQ.html
Normal file
File diff suppressed because it is too large
Load Diff
486
doc/src/FAQ/FAQ_DEV.html
Normal file
486
doc/src/FAQ/FAQ_DEV.html
Normal file
@ -0,0 +1,486 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>PostgreSQL Developers FAQ</title>
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF">
|
||||
<H1>
|
||||
Developer's Frequently Asked Questions (FAQ) for PostgreSQL
|
||||
</H1>
|
||||
<P>
|
||||
Last updated: Fri Jun 9 21:54:54 EDT 2000
|
||||
<P>
|
||||
Current maintainer: Bruce Momjian (<a
|
||||
href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<BR>
|
||||
<P>
|
||||
The most recent version of this document can be viewed at
|
||||
the postgreSQL Web site, <a
|
||||
href="http://PostgreSQL.org">http://PostgreSQL.org</a>.
|
||||
<P>
|
||||
<HR>
|
||||
<P>
|
||||
|
||||
<CENTER><H2>Questions</H2></CENTER>
|
||||
<a href="#1">1</a>) What tools are available for developers?<BR>
|
||||
<a href="#2">2</a>) What books are good for developers?<BR>
|
||||
<a href="#3">3</a>) Why do we use <I>palloc</I>() and <I>pfree</I>() to allocate memory?<BR>
|
||||
<a href="#4">4</a>) Why do we use <I>Node</I> and <I>List</I> to
|
||||
make data structures?<BR>
|
||||
<a href="#5">5</a>) How do I add a feature or fix a bug?<BR>
|
||||
<a href="#6">6</a>) How do I download/update the current source tree?<BR>
|
||||
<a href="#7">7</a>) How do I test my changes?<BR>
|
||||
<a href="#7">7</a>) I just added a field to a structure. What else
|
||||
should I do?<BR>
|
||||
<a href="#8">8</a>) Why are table, column, type, function, view
|
||||
names sometimes referenced as <I>Name</I> or <I>NameData,</I> and
|
||||
sometimes as <I>char *?</I><BR>
|
||||
<a href="#9">9</a>) How do I efficiently access information in
|
||||
tables from the backend code?<BR>
|
||||
<a href="#10">10</a>) What is elog()?<BR>
|
||||
<a href="#11">11</a>) What is configure all about?<BR>
|
||||
<a href="#12">12</a>) How do I add a new port?<BR>
|
||||
<BR>
|
||||
<HR>
|
||||
|
||||
<H3><a
|
||||
name="1">1</a>) What tools are available for developers?</H3><P>
|
||||
|
||||
Aside from the User documentation mentioned in the regular FAQ, there
|
||||
are several development tools available. First, all the files in the
|
||||
<I>/tools</I> directory are designed for developers.
|
||||
|
||||
<PRE>
|
||||
RELEASE_CHANGES changes we have to make for each release
|
||||
SQL_keywords standard SQL'92 keywords
|
||||
backend description/flowchart of the backend directories
|
||||
ccsym find standard defines made by your compiler
|
||||
entab converts tabs to spaces, used by pgindent
|
||||
find_static finds functions that could be made static
|
||||
find_typedef get a list of typedefs in the source code
|
||||
make_ctags make vi 'tags' file in each directory
|
||||
make_diff make *.orig and diffs of source
|
||||
make_etags make emacs 'etags' files
|
||||
make_keywords.README make comparison of our keywords and SQL'92
|
||||
make_mkid make mkid ID files
|
||||
mkldexport create AIX exports file
|
||||
pgindent indents C source files
|
||||
pginclude scripts for adding/removing include files
|
||||
unused_oids in pgsql/src/include/catalog
|
||||
</PRE>
|
||||
|
||||
Let me note some of these. If you point your browser at the
|
||||
<I>file:/usr/local/src/pgsql/src/tools/backend/index.html</I> directory,
|
||||
you will see few paragraphs describing the data flow, the backend
|
||||
components in a flow chart, and a description of the shared memory area.
|
||||
You can click on any flowchart box to see a description. If you then
|
||||
click on the directory name, you will be taken to the source directory,
|
||||
to browse the actual source code behind it. We also have several README
|
||||
files in some source directories to describe the function of the module.
|
||||
The browser will display these when you enter the directory also. The
|
||||
<I>tools/backend</I> directory is also contained on our web page under
|
||||
the title <I>How PostgreSQL Processes a Query.</I><P>
|
||||
|
||||
|
||||
Second, you really should have an editor that can handle tags, so you
|
||||
can tag a function call to see the function definition, and then tag
|
||||
inside that function to see an even lower-level function, and then back
|
||||
out twice to return to the original function. Most editors support this
|
||||
via <I>tags</I> or <I>etags</I> files.<P>
|
||||
|
||||
|
||||
Third, you need to get <I>id-utils</I> from:
|
||||
<pre>
|
||||
<a href="ftp://alpha.gnu.org/gnu/id-utils-3.2d.tar.gz">ftp://alpha.gnu.org/gnu/id-utils-3.2d.tar.gz</a>
|
||||
<a href="ftp://tug.org/gnu/id-utils-3.2d.tar.gz">ftp://tug.org/gnu/id-utils-3.2d.tar.gz</a>
|
||||
<a href="ftp://ftp.enst.fr/pub/gnu/gnits/id-utils-3.2d.tar.gz">ftp://ftp.enst.fr/pub/gnu/gnits/id-utils-3.2d.tar.gz</a>
|
||||
</pre>
|
||||
|
||||
By running <I>tools/make_mkid</I>, an archive of source symbols can be
|
||||
created that can be rapidly queried like <I>grep</I> or edited. Others
|
||||
prefer <I>glimpse.</I><P>
|
||||
|
||||
|
||||
<I>make_diff</I> has tools to create patch diff files that can be
|
||||
applied to the distribution.<P>
|
||||
|
||||
|
||||
Our standard format is to indent each code level with one tab, where
|
||||
each tab is four spaces. You will need to set your editor to display
|
||||
tabs as four spaces:
|
||||
<BR>
|
||||
<PRE>
|
||||
vi in ~/.exrc:
|
||||
set tabstop=4
|
||||
set sw=4
|
||||
more:
|
||||
more -x4
|
||||
less:
|
||||
less -x4
|
||||
emacs:
|
||||
M-x set-variable tab-width
|
||||
or
|
||||
; Cmd to set tab stops &etc for working with PostgreSQL code
|
||||
(c-add-style "pgsql"
|
||||
'("bsd"
|
||||
(indent-tabs-mode . t)
|
||||
(c-basic-offset . 4)
|
||||
(tab-width . 4)
|
||||
(c-offsets-alist .
|
||||
((case-label . +))))
|
||||
t) ; t = set this mode on
|
||||
|
||||
and add this to your autoload list (modify file path in macro):
|
||||
|
||||
(setq auto-mode-alist
|
||||
(cons '("\\`/usr/local/src/pgsql/.*\\.[chyl]\\'" . pgsql-c-mode)
|
||||
auto-mode-alist))
|
||||
or
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-indent-level: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
*/
|
||||
</PRE>
|
||||
<BR>
|
||||
<I>pgindent</I> will the format code by specifying
|
||||
flags to your operating system's utility <I>indent.</I><P>
|
||||
<I>pgindent</I> is run on all source files just before each beta test
|
||||
period. It auto-formats all source files to make them consistent.
|
||||
Comment blocks that need specific line breaks should be formatted as
|
||||
<I>block comments,</I> where the comment starts as
|
||||
<CODE>/*------</CODE>. These comments will not be reformatted in any
|
||||
way.
|
||||
|
||||
<I>pginclude</I> contains scripts used to add needed #include's to
|
||||
include files, and removed unneeded #include's.
|
||||
|
||||
When adding system types, you will need to assign oids to them.
|
||||
There is also a script called <I>unused_oids</I> in
|
||||
<I>pgsql/src/include/catalog</I> that shows the unused oids.
|
||||
|
||||
<H3><a name="2">2</a>) What books are good for developers?</H3><P>
|
||||
|
||||
I have four good books, <I>An Introduction to Database Systems,</I> by
|
||||
C.J. Date, Addison, Wesley, <I>A Guide to the SQL Standard,</I> by C.J.
|
||||
Date, et. al, Addison, Wesley, <I>Fundamentals of Database Systems,</I>
|
||||
by Elmasri and Navathe, and <I>Transaction Processing,</I> by Jim Gray,
|
||||
Morgan, Kaufmann<P>
|
||||
|
||||
There is also a database performance site, with a handbook on-line
|
||||
written by Jim Gray at <A
|
||||
HREF="http://www.benchmarkresources.com">http://www.benchmarkresources.com.</A>
|
||||
|
||||
|
||||
|
||||
<H3><a name="3">3</a>) Why do we use <I>palloc</I>() and <I>pfree</I>()
|
||||
to allocate memory?</H3><P>
|
||||
|
||||
<I>palloc()</I> and <I>pfree()</I> are used in place of malloc() and
|
||||
free() because we automatically free all memory allocated when a
|
||||
transaction completes. This makes it easier to make sure we free memory
|
||||
that gets allocated in one place, but only freed much later. There are
|
||||
several contexts that memory can be allocated in, and this controls when
|
||||
the allocated memory is automatically freed by the backend.<P>
|
||||
|
||||
|
||||
<H3><a name="4">4</a>) Why do we use <I>Node</I> and <I>List</I> to
|
||||
make data structures?</H3><P>
|
||||
|
||||
We do this because this allows a consistent way to pass data inside the
|
||||
backend in a flexible way. Every node has a <I>NodeTag</I> which
|
||||
specifies what type of data is inside the Node. <I>Lists</I> are groups
|
||||
of <I>Nodes chained together as a forward-linked list.</I><P>
|
||||
Here are some of the <I>List</I> manipulation commands:
|
||||
<BLOCKQUOTE>
|
||||
<DL>
|
||||
<DT>lfirst(i)
|
||||
<DD>return the data at list element <I>i.</I>
|
||||
<DT>lnext(i)
|
||||
<DD>return the next list element after <I>i.</I>
|
||||
<DT>foreach(i, list)
|
||||
<DD>loop through <I>list,</I> assigning each list element to <I>i.</I>
|
||||
It is important to note that <I>i</I> is a List *, not the data in the
|
||||
<I>List</I> element. You need to use <I>lfirst(i)</I> to get at the data.
|
||||
Here is a typical code snipped that loops through a List containing
|
||||
<I>Var *'s</I> and processes each one:
|
||||
<PRE>
|
||||
<CODE>
|
||||
List *i, *list;
|
||||
|
||||
foreach(i, list)
|
||||
{
|
||||
Var *var = lfirst(i);
|
||||
|
||||
/* process var here */
|
||||
}
|
||||
</CODE>
|
||||
</PRE>
|
||||
<DT>lcons(node, list)
|
||||
<DD>add <I>node</I> to the front of <I>list,</I> or create a new list with
|
||||
<I>node</I> if <I>list</I> is <I>NIL.</I>
|
||||
<DT>lappend(list, node)
|
||||
<DD>add <I>node</I> to the end of <I>list.</I> This is more expensive
|
||||
that lcons.
|
||||
<DT>nconc(list1, list2)
|
||||
<DD>Concat <I>list2</I> on to the end of <I>list1.</I>
|
||||
<DT>length(list)
|
||||
<DD>return the length of the <I>list.</I>
|
||||
<DT>nth(i, list)
|
||||
<DD>return the <I>i</I>'th element in <I>list.</I>
|
||||
<DT>lconsi, ...
|
||||
<DD>There are integer versions of these: <I>lconsi, lappendi, nthi.</I>
|
||||
<I>List's</I> containing integers instead of Node pointers are used to
|
||||
hold list of relation object id's and other integer quantities.
|
||||
</DL>
|
||||
</BLOCKQUOTE>
|
||||
You can print nodes easily inside <I>gdb.</I> First, to disable
|
||||
output truncation when you use the gdb <I>print</I> command:
|
||||
<PRE>
|
||||
<CODE>
|
||||
(gdb) set print elements 0
|
||||
</CODE>
|
||||
</PRE>
|
||||
Instead of printing values in gdb format, you can use the next two
|
||||
commands to print out List, Node, and structure contents in a verbose
|
||||
format that is easier to understand. List's are unrolled into nodes,
|
||||
and nodes are printed in detail. The first prints in a short format,
|
||||
and the second in a long format:
|
||||
<PRE>
|
||||
<CODE>
|
||||
(gdb) call print(any_pointer)
|
||||
(gdb) call pprint(any_pointer)
|
||||
</CODE>
|
||||
</PRE>
|
||||
The output appears in the postmaster log file, or on your screen if you
|
||||
are running a backend directly without a postmaster.
|
||||
<P>
|
||||
|
||||
<H3><a name="5">5</a>) How do I add a feature or fix a bug?</H3><P>
|
||||
|
||||
The source code is over 250,000 lines. Many problems/features are
|
||||
isolated to one specific area of the code. Others require knowledge of
|
||||
much of the source. If you are confused about where to start, ask the
|
||||
hackers list, and they will be glad to assess the complexity and give
|
||||
pointers on where to start.<P>
|
||||
|
||||
Another thing to keep in mind is that many fixes and features can be
|
||||
added with surprisingly little code. I often start by adding code, then
|
||||
looking at other areas in the code where similar things are done, and by
|
||||
the time I am finished, the patch is quite small and compact.<P>
|
||||
|
||||
When adding code, keep in mind that it should use the existing
|
||||
facilities in the source, for performance reasons and for simplicity.
|
||||
Often a review of existing code doing similar things is helpful.<P>
|
||||
|
||||
|
||||
<H3><a name="6">6</a>) How do I download/update the current source
|
||||
tree?</H3><P>
|
||||
|
||||
|
||||
There are several ways to obtain the source tree. Occasional developers
|
||||
can just get the most recent source tree snapshot from
|
||||
ftp.postgresql.org. For regular developers, you can use CVS. CVS
|
||||
allows you to download the source tree, then occasionally update your
|
||||
copy of the source tree with any new changes. Using CVS, you don't have
|
||||
to download the entire source each time, only the changed files.
|
||||
Anonymous CVS does not allows developers to update the remote source
|
||||
tree, though privileged developers can do this. There is a CVS FAQ on
|
||||
our web site that describes how to use remote CVS. You can also use
|
||||
CVSup, which has similarly functionality, and is available from
|
||||
ftp.postgresql.org.<P>
|
||||
|
||||
To update the source tree, there are two ways. You can generate a patch
|
||||
against your current source tree, perhaps using the make_diff tools
|
||||
mentioned above, and send them to the patches list. They will be
|
||||
reviewed, and applied in a timely manner. If the patch is major, and we
|
||||
are in beta testing, the developers may wait for the final release
|
||||
before applying your patches.<P>
|
||||
|
||||
For hard-core developers, Marc(scrappy@postgresql.org) will give you a
|
||||
Unix shell account on postgresql.org, so you can use CVS to update the
|
||||
main source tree, or you can ftp your files into your account, patch,
|
||||
and cvs install the changes directly into the source tree. <P>
|
||||
|
||||
<H3><a name="6">6</a>) How do I test my changes?</H3><P>
|
||||
|
||||
First, use <I>psql</I> to make sure it is working as you expect. Then
|
||||
run <I>src/test/regress</I> and get the output of
|
||||
<I>src/test/regress/checkresults</I> with and without your changes, to
|
||||
see that your patch does not change the regression test in unexpected
|
||||
ways. This practice has saved me many times. The regression tests test
|
||||
the code in ways I would never do, and has caught many bugs in my
|
||||
patches. By finding the problems now, you save yourself a lot of
|
||||
debugging later when things are broken, and you can't figure out when it
|
||||
happened.<P>
|
||||
|
||||
|
||||
<H3><a name="7">7</a>) I just added a field to a structure. What else
|
||||
should I do?</H3><P>
|
||||
|
||||
The structures passing around from the parser, rewrite, optimizer, and
|
||||
executor require quite a bit of support. Most structures have support
|
||||
routines in <I>src/backend/nodes</I> used to create, copy, read, and output
|
||||
those structures. Make sure you add support for your new field to these
|
||||
files. Find any other places the structure may need code for your new
|
||||
field. <I>mkid</I> is helpful with this (see above).<P>
|
||||
|
||||
|
||||
<H3><a name="8">8</a>) Why are table, column, type, function, view
|
||||
names sometimes referenced as <I>Name</I> or <I>NameData,</I> and
|
||||
sometimes as <I>char *?</I></H3><P>
|
||||
|
||||
Table, column, type, function, and view names are stored in system
|
||||
tables in columns of type <I>Name.</I> Name is a fixed-length,
|
||||
null-terminated type of <I>NAMEDATALEN</I> bytes. (The default value
|
||||
for NAMEDATALEN is 32 bytes.)
|
||||
|
||||
<PRE><CODE>
|
||||
typedef struct nameData
|
||||
{
|
||||
char data[NAMEDATALEN];
|
||||
} NameData;
|
||||
typedef NameData *Name;
|
||||
</CODE></PRE>
|
||||
|
||||
Table, column, type, function, and view names that come into the
|
||||
backend via user queries are stored as variable-length, null-terminated
|
||||
character strings.<P>
|
||||
|
||||
Many functions are called with both types of names, ie. <I>heap_open().</I>
|
||||
Because the Name type is null-terminated, it is safe to pass it to a
|
||||
function expecting a char *. Because there are many cases where on-disk
|
||||
names(Name) are compared to user-supplied names(char *), there are many
|
||||
cases where Name and char * are used interchangeably.<P>
|
||||
|
||||
<H3><a name="9">9</a>) How do I efficiently access information in
|
||||
tables from the backend code?</H3><P>
|
||||
|
||||
You first need to find the tuples(rows) you are interested in. There
|
||||
are two ways. First, <I>SearchSysCacheTuple()</I> and related functions
|
||||
allow you to query the system catalogs. This is the preferred way to
|
||||
access system tables, because the first call to the cache loads the
|
||||
needed rows, and future requests can return the results without
|
||||
accessing the base table. The caches use system table indexes
|
||||
to look up tuples. A list of available caches is located in
|
||||
<I>src/backend/utils/cache/syscache.c.</I>
|
||||
<I>src/backend/utils/cache/lsyscache.c</I> contains many column-specific
|
||||
cache lookup functions.<P>
|
||||
|
||||
The rows returned are cached-owned versions of the heap rows. They are
|
||||
invalidated when the base table changes. Because the cache is local to
|
||||
each backend, you may use the pointer returned from the cache for short
|
||||
periods without making a copy of the tuple. If you send the pointer
|
||||
into a large function that will be doing its own cache lookups, it is
|
||||
possible the cache entry may be flushed, so you should use
|
||||
<I>SearchSysCacheTupleCopy()</I> in these cases, and <I>pfree()</I> the
|
||||
tuple when you are done.<P>
|
||||
|
||||
If you can't use the system cache, you will need to retrieve the data
|
||||
directly from the heap table, using the buffer cache that is shared by
|
||||
all backends. The backend automatically takes care of loading the rows
|
||||
into the buffer cache.<P>
|
||||
|
||||
Open the table with <I>heap_open().</I> You can then start a table scan
|
||||
with <I>heap_beginscan(),</I> then use <I>heap_getnext()</I> and
|
||||
continue as long as <I>HeapTupleIsValid()</I> returns true. Then do a
|
||||
<I>heap_endscan().</I> <I>Keys</I> can be assigned to the <I>scan.</I>
|
||||
No indexes are used, so all rows are going to be compared to the keys,
|
||||
and only the valid rows returned.<P>
|
||||
|
||||
You can also use <I>heap_fetch()</I> to fetch rows by block
|
||||
number/offset. While scans automatically lock/unlock rows from the
|
||||
buffer cache, with <I>heap_fetch(),</I> you must pass a <I>Buffer</I>
|
||||
pointer, and <I>ReleaseBuffer()</I> it when completed.
|
||||
|
||||
Once you have the row, you can get data that is common to all tuples,
|
||||
like <I>t_self</I> and <I>t_oid,</I> by merely accessing the
|
||||
<I>HeapTuple</I> structure entries.
|
||||
|
||||
If you need a table-specific column, you should take the HeapTuple
|
||||
pointer, and use the <I>GETSTRUCT()</I> macro to access the
|
||||
table-specific start of the tuple. You then cast the pointer as a
|
||||
<I>Form_pg_proc</I> pointer if you are accessing the pg_proc table, or
|
||||
<I>Form_pg_type</I> if you are accessing pg_type. You can then access
|
||||
the columns by using a structure pointer:
|
||||
|
||||
<PRE>
|
||||
<CODE>
|
||||
((Form_pg_class) GETSTRUCT(tuple))->relnatts
|
||||
</CODE>
|
||||
</PRE>
|
||||
|
||||
You should not directly change <I>live</I> tuples in this way. The best
|
||||
way is to use <I>heap_tuplemodify()</I> and pass it your palloc'ed
|
||||
tuple, and the values you want changed. It returns another palloc'ed
|
||||
tuple, which you pass to <I>heap_replace().</I>
|
||||
|
||||
You can delete tuples by passing the tuple's <I>t_self</I> to
|
||||
<I>heap_destroy().</I> You can use it for <I>heap_update()</I> too.
|
||||
|
||||
Remember, tuples can be either system cache versions, which may go away
|
||||
soon after you get them, buffer cache versions, which go away when
|
||||
you <I>heap_getnext(),</I> <I>heap_endscan,</I> or
|
||||
<I>ReleaseBuffer()</I>, in the <I>heap_fetch()</I> case. Or it may be a
|
||||
palloc'ed tuple, that you must <I>pfree()</I> when finished.
|
||||
|
||||
<H3><a name="10">10</a>) What is elog()?</H3><P>
|
||||
|
||||
<I>elog()</I> is used to send messages to the front-end, and optionally
|
||||
terminate the current query being processed. The first parameter is an
|
||||
elog level of <I>NOTICE,</I> <I>DEBUG,</I> <I>ERROR,</I> or
|
||||
<I>FATAL.</I>
|
||||
|
||||
<I>NOTICE</I> prints on the user's terminal and the postmaster logs.
|
||||
<I>DEBUG</I> prints only in the postmaster logs. <I>ERROR</I> prints in
|
||||
both places, and terminates the current query, never returning from the call.
|
||||
<I>FATAL</I> terminates the backend process.
|
||||
|
||||
The remaining parameters of <I>elog</I> are a <I>printf</I>-style set of
|
||||
parameters to print.
|
||||
|
||||
<H3><a name="11">11</a>) What is configure all about?</H3><P>
|
||||
|
||||
The files <I>configure</I> and <I>configure.in</I> are part of the
|
||||
GNU <I>autoconf</I> package. Configure allows us to test for various
|
||||
capabilities of the OS, and to set variables that can then be tested in
|
||||
C programs and Makefiles. Autoconf is installed on the PostgreSQL main
|
||||
server. To add options to configure, edit <I>configure.in,</I> and then
|
||||
run <I>autoconf</I> to generate <I>configure.</I><P>
|
||||
|
||||
When <I>configure</I> is run by the user, it tests various OS
|
||||
capabilities, stores those in <I>config.status</I> and
|
||||
<I>config.cache,</I> and modifies a list of <I>*.in</I> files. For
|
||||
example, if there exists a <I>Makefile.in,</I> configure generates a
|
||||
<I>Makefile</I> that contains substitutions for all @var@ parameters
|
||||
found by configure.<P>
|
||||
|
||||
When you need to edit files, make sure you don't waste time modifying
|
||||
files generated by <I>configure.</I> Edit the <I>*.in</I> file, and
|
||||
re-run <I>configure</I> to recreate the needed file. If you run <I>make
|
||||
distclean</I> from the top-level source directory, all files derived by
|
||||
configure are removed, so you see only the file contained in the source
|
||||
distribution.<P>
|
||||
|
||||
<H3><a name="12">12</a>) How do I add a new port?</H3><P>
|
||||
|
||||
There are a variety of places that need to be modified to add a new
|
||||
port. First, start in the <I>src/template</I> directory. Add an
|
||||
appropriate entry for your OS. Also, use <I>src/config.guess</I> to add
|
||||
your OS to <I>src/template/.similar.</I> You shouldn't match the OS
|
||||
version exactly. The <I>configure</I> test will look for an exact OS
|
||||
version number, and if not found, find a match without version number.
|
||||
Edit <I>src/configure.in</I> to add your new OS. (See configure item
|
||||
above.) You will need to run autoconf, or patch <I>src/configure</I>
|
||||
too.<P>
|
||||
|
||||
Then, check <I>src/include/port</I> and add your new OS file, with
|
||||
appropriate values. Hopefully, there is already locking code in
|
||||
<I>src/include/storage/s_lock.h</I> for your CPU. There is also a
|
||||
<I>src/makefiles</I> directory for port-specific Makefile handling.
|
||||
There is a <I>backend/port</I> directory if you need special files for
|
||||
your OS.<P>
|
||||
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
1136
doc/src/FAQ/FAQ_german.html
Normal file
1136
doc/src/FAQ/FAQ_german.html
Normal file
File diff suppressed because it is too large
Load Diff
172
doc/src/FAQ/FAQ_hpux.html
Executable file
172
doc/src/FAQ/FAQ_hpux.html
Executable file
@ -0,0 +1,172 @@
|
||||
<PRE>
|
||||
=======================================================
|
||||
Frequently Asked Questions (FAQ) for PostgreSQL V6.4
|
||||
HP-UX Specific
|
||||
TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ
|
||||
=======================================================
|
||||
last updated: Sat Nov 28 16:21:25 EST 1998
|
||||
|
||||
current maintainer: Tom Lane (tgl@sss.pgh.pa.us)
|
||||
original author: Tom Lane (tgl@sss.pgh.pa.us)
|
||||
|
||||
|
||||
Questions covered here:
|
||||
1.1) What do I need to install PostgreSQL on HP-UX?
|
||||
1.2) Anything special about the build/install procedure?
|
||||
1.3) yacc dies trying to process src/backend/parser/gram.y.
|
||||
1.4) Linking the main postgres executable fails, complaining that
|
||||
there's no "alloca" function.
|
||||
1.5) OK, it seemed to build and install, but the regression test fails.
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 1: Installing PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
|
||||
1.1) What do I need to install PostgreSQL on HP-UX?
|
||||
|
||||
PostgreSQL 6.4 is known to build and pass regression test on HPUX 9.03,
|
||||
9.05, and 10.20, given appropriate system patch levels and build tools.
|
||||
It should work on other HPUX 9.* and 10.* releases for Series 700/800
|
||||
machines, too. (No one has reported trying it with HPUX 11 yet.)
|
||||
Since this is a new FAQ, I don't yet have a lot of information about the
|
||||
exact prerequisites, but I'd appreciate hearing from anyone who fails to
|
||||
build a working copy, so that we can add more info about exactly what is
|
||||
needed.
|
||||
|
||||
Aside from PostgreSQL 6.4 or later sources, you will need GNU make
|
||||
(HP's make will not do), and either GNU gcc or HP's full ANSI C compiler.
|
||||
You must also get flex (GNU lex) 2.5.4 or later --- all versions of
|
||||
HP's lex fail on the Postgres lexer files.
|
||||
|
||||
I'd also recommend making sure you are fairly up-to-date on HP patches,
|
||||
particularly if you are using HPUX 9. At a minimum, if you are on HPUX 9,
|
||||
you *must* have PHSS_4630 (libm update) or a successor patch; otherwise
|
||||
Postgres' date/time functions will misbehave. On general principles you
|
||||
should be current on libc and ld/dld patches, as well as compiler
|
||||
patches if you are using HP's C compiler (but I don't currently know of
|
||||
any specific failures due to not having recent patches for these files).
|
||||
See HP's support websites, such as http://us-support.external.hp.com/,
|
||||
for free copies of their latest patches.
|
||||
|
||||
PostgreSQL 6.3.2 and earlier required quite a few small tweaks to
|
||||
install on HPUX, so I recommend you not bother with anything older
|
||||
than 6.4.
|
||||
|
||||
|
||||
1.2) Anything special about the build/install procedure?
|
||||
|
||||
When you run configure, you will want to explicitly select either the
|
||||
hpux_cc or hpux_gcc template depending on which compiler you plan to
|
||||
use:
|
||||
./configure --with-template=hpux_cc
|
||||
for HP's C compiler, or
|
||||
./configure --with-template=hpux_gcc
|
||||
for GNU gcc. (If you omit --with-template, configure may either
|
||||
default to hpux_cc or give up entirely, depending on which HPUX and
|
||||
PostgreSQL releases you have.)
|
||||
|
||||
You may want to tweak the CFLAGS setting in template/hpux_[g]cc before
|
||||
you configure; the distributed files contain neither -O nor -g switches,
|
||||
which is hardly optimal for any situation. I've seen no problems using
|
||||
-O with gcc 2.7.2.*.
|
||||
|
||||
The default install target location is /usr/local/pgsql, which
|
||||
(particularly on HPUX 10) you might want to change to something under
|
||||
/opt. If so, use the --prefix switch to configure.
|
||||
|
||||
If you have both HP and GNU C++ compilers in your PATH, keep an eye on
|
||||
whether configure picks the right one --- you want the HP c++ if you are
|
||||
using HP C, or g++ if you are using gcc. Mixing HP and GNU compilers
|
||||
won't work. You may need to provide a --with-CXX=compiler switch to
|
||||
force configure to pick the matching C++ compiler, or even say
|
||||
--without-CXX if you have a C++ compiler but it doesn't match the C
|
||||
compiler you want to use.
|
||||
|
||||
Otherwise the standard build/install procedure described in the
|
||||
PostgreSQL documentation works fine.
|
||||
|
||||
|
||||
1.3) yacc dies trying to process src/backend/parser/gram.y.
|
||||
|
||||
HP's yacc doesn't create its tables large enough to handle the Postgres
|
||||
grammar (a lot of other vendors' yaccs have this problem too). There
|
||||
are three possible workarounds:
|
||||
|
||||
1. The quickest answer is just to "touch" src/backend/parser/gram.c
|
||||
and src/backend/parser/parse.h and repeat the build. Any PostgreSQL
|
||||
distribution file should have up-to-date copies of those files included,
|
||||
so you shouldn't need to run yacc on gram.y at all ... but sometimes
|
||||
gram.y mistakenly has a newer timestamp in the distribution than the
|
||||
derived files do.
|
||||
|
||||
2. Install "bison" (GNU yacc) and reconfigure. Bison doesn't have a
|
||||
problem with large grammars. Note this is not the right choice if you
|
||||
are using HP's cc on HPUX 9 --- see next item.
|
||||
|
||||
3. Increase yacc's table sizes enough to cope. With a pre-6.4
|
||||
PostgreSQL grammar, I was able to get HPUX 9's yacc to work by
|
||||
setting YFLAGS to
|
||||
-d -Np2000 -Ns3000 -Nm100000 -Nl2000 -Na30000 -Nc10000
|
||||
(You can edit YFLAGS either in the template file before running
|
||||
configure, or in src/Makefile.global afterwards.) Future PostgreSQL
|
||||
releases might require even larger tables, but this should do for
|
||||
a starting point.
|
||||
|
||||
|
||||
1.4) Linking the main postgres executable fails, complaining that
|
||||
there's no "alloca" function.
|
||||
|
||||
If you're using HP's cc on HPUX 9, it's right: there's no alloca
|
||||
function. The only place in PostgreSQL that uses alloca is the parser
|
||||
(gram.c), and that does so only if it was generated with GNU bison.
|
||||
Unfortunately the distribution copy of gram.c is made with bison.
|
||||
There are several possible answers:
|
||||
|
||||
1. Remake gram.c with HP's yacc (see above item for switch settings).
|
||||
You might also need to remake src/backend/bootstrap/bootparse.c.
|
||||
|
||||
2. Build with gcc, which treats alloca as a compiled-in-line function.
|
||||
|
||||
3. Install HPUX 10, which has alloca. You're gonna have to do that
|
||||
before Y2K anyway...
|
||||
|
||||
|
||||
1.5) OK, it seemed to build and install, but the regression test fails.
|
||||
|
||||
There are several "expected failures" due to differences between HPUX
|
||||
and the regression test reference platform used by the PostgreSQL group.
|
||||
A look at the textual differences between the expected and actual
|
||||
outputs will usually reveal that the differences are minor. You should
|
||||
expect these differences:
|
||||
|
||||
TEST(S) COMMENTS
|
||||
|
||||
int2, int4: pg_atoi generates a differently worded error
|
||||
message for integer overflow.
|
||||
|
||||
float8: In 6.4, float8 shows some differences due to
|
||||
different handling of overflow/underflow errors in
|
||||
exp() and pow(). This should be fixed in 6.4.1
|
||||
and later.
|
||||
|
||||
float8, geometry: Lots of differences in the last digit or two
|
||||
because of different roundoff errors in floating
|
||||
arithmetic. Also, HPUX does not distinguish
|
||||
-0 from 0 during printout, but the reference
|
||||
platform does.
|
||||
|
||||
horology: HPUX time library does not know about daylight
|
||||
savings time before 1970, so there are some
|
||||
places in horology where a time will be shown
|
||||
in PST instead of PDT.
|
||||
|
||||
In addition, the int8 regression test will fail massively on HPUX 9,
|
||||
because int8 doesn't actually work on this platform (sprintf/sscanf
|
||||
don't cope with long long int). Either upgrade to HPUX 10, or don't
|
||||
use int8 data.
|
||||
|
||||
Any other error is cause for suspicion. In particular, if you see
|
||||
failures in the datetime test on HPUX 9, you probably forgot to
|
||||
install the libm patch PHSS_4630 --- see item 1.1 above.
|
||||
</PRE>
|
492
doc/src/FAQ/FAQ_irix.html
Executable file
492
doc/src/FAQ/FAQ_irix.html
Executable file
@ -0,0 +1,492 @@
|
||||
<PRE>
|
||||
======================================================
|
||||
Frequently Asked Questions (FAQ) for PostgreSQL >=V6.1
|
||||
IRIX Specific
|
||||
TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ
|
||||
======================================================
|
||||
last updated: Mon Mar 05 17:00:00 GMT 1998
|
||||
|
||||
current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
|
||||
original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
|
||||
|
||||
|
||||
Changes in this version (* = modified, + = new, - = removed):
|
||||
*1.5) Can I install PostgreSQL (<V6.3) under Irix 6.x?
|
||||
+1.10) How do I install PostgreSQL V6.3 under Irix 6.x?
|
||||
|
||||
This file is divided approximately as follows:
|
||||
1.*) Installing PostgreSQL
|
||||
2.*) Uninstalling PostgreSQL
|
||||
3.*) Extending PostgreSQL
|
||||
|
||||
|
||||
Questions answered:
|
||||
1.1) What extra items do I need to install PostgreSQL under Irix?
|
||||
1.2) What changes do I need to make to src/Makefile.global?
|
||||
1.3) What are the references in X11_LIB to libsocket and libnsl in
|
||||
src/Makefile.global?
|
||||
1.4) Are there any other changes I should make?
|
||||
1.5) Can I install PostgreSQL (<V6.3) under Irix 6.x?
|
||||
1.6) The make fails with the following message:
|
||||
ld32: ERROR 4: Conflicting flag setting: -call_shared
|
||||
1.7) Why won't it link? (Problems with lorder)
|
||||
1.8) I have major problems with IRIX 6!
|
||||
1.9) Why does lex fail with PostgreSQL 6.2.1?
|
||||
1.10) How do I install PostgreSQL V6.3 under Irix 6.x?
|
||||
2.1) Why can't I move the executable files?
|
||||
3.1) How do I compile a C program to create a function for extending
|
||||
PostgreSQL
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 1: Installing PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
|
||||
1.1) What extra items do I need to install PostgreSQL under Irix?
|
||||
|
||||
You *must* have the following installed:
|
||||
a) Gnu make (installed as gmake)
|
||||
|
||||
You are recommended to install the following:
|
||||
a) GNU install (installed as ginstall)
|
||||
(This is part of the GNU fileutils package)
|
||||
|
||||
You may choose to install the following:
|
||||
a) GNU readline library (if you wish psql to have readline
|
||||
support).
|
||||
b) tcl/tk (if you wish to compile pgtclsh)
|
||||
|
||||
1.2) What changes do I need to make to src/Makefile.global or
|
||||
src/Makefile.custom?
|
||||
|
||||
The easiest way to do this is to use the customize script in
|
||||
the src directory.
|
||||
|
||||
You *must* set the following variables:
|
||||
PORTNAME= irix5
|
||||
|
||||
You will also need to change the following to match your own
|
||||
installation:
|
||||
POSTGRESDIR
|
||||
|
||||
If you switch on the USE_TCL option, you will need to set these:
|
||||
TCL_INCDIR=
|
||||
TCL_LIBDIR=
|
||||
TCL_LIB =
|
||||
TK_INCDIR=
|
||||
TK_LIBDIR=
|
||||
TK_LIB =
|
||||
|
||||
You may also make any other changes you need as documented in
|
||||
the INSTALL file and in Makefile.global
|
||||
|
||||
1.3) What are the references in X11_LIB to libsocket and libnsl in
|
||||
src/Makefile.global?
|
||||
|
||||
This was a problem in 1.08 (they are Sun Solaris specific).
|
||||
It is fixed in 1.09 and above.
|
||||
|
||||
1.4) Are there any other changes I should make?
|
||||
|
||||
If you have installed the GNU install program (ginstall), you
|
||||
should add the following line to src/Makefile.custom:
|
||||
CUSTOM_INSTALL=ginstall
|
||||
|
||||
For an explanation as to why this is a good idea, see Question 2.1
|
||||
Ginstall is part of the GNU fileutils package.
|
||||
|
||||
|
||||
1.5) Can I install PostgreSQL (<V6.3) under Irix 6.x?
|
||||
|
||||
Instructions for PostgreSQL V6.3 are answered in Question 1.10!
|
||||
|
||||
Irix 6.2-6.4 has a bug in ld which mishandles the addresses of
|
||||
static procedures when object files are assembled into
|
||||
larger object files using 'ld -r'. This bug has been reported
|
||||
to Silicon Graphics.
|
||||
|
||||
One option is to use the Gnu version of ld. Alternatively,
|
||||
the following patch should be applied as a workaround.
|
||||
(Supplied by Bob Bruccoleri <bruc@bms.com>)
|
||||
|
||||
*** ./backend/Makefile.orig Thu May 22 00:00:15 1997
|
||||
--- ./backend/Makefile Thu Jun 5 16:47:27 1997
|
||||
***************
|
||||
*** 54,60 ****
|
||||
all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source
|
||||
|
||||
postgres: $(OBJS) ../utils/version.o
|
||||
! $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
||||
|
||||
$(OBJS): $(DIRS:%=%.dir)
|
||||
|
||||
--- 54,64 ----
|
||||
all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source
|
||||
|
||||
postgres: $(OBJS) ../utils/version.o
|
||||
! # $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
||||
! -rm -f *.o
|
||||
! find . -name "*.o" -exec cp \{\} . \;
|
||||
! rm -f SUBSYS.o
|
||||
! $(CC) -o postgres *.o ../utils/version.o $(LDFLAGS)
|
||||
|
||||
$(OBJS): $(DIRS:%=%.dir)
|
||||
|
||||
|
||||
|
||||
|
||||
1.6) The make fails with the following message:
|
||||
ld32: ERROR 4: Conflicting flag setting: -call_shared
|
||||
|
||||
If gmake fails in .../src/backend while building obj/ACCESS.o
|
||||
with a message from ld32, you can work around this by using
|
||||
ld for the LD environment variable rather than cc.
|
||||
|
||||
The problem has been observed under Irix 5.3 when compiling both
|
||||
Postgres95-1.09 and PostgreSQL-6.2Beta6, but on some systems
|
||||
these appear to compile with no such problems.
|
||||
|
||||
Fix supplied by Brian Sanders (bsanders@netcom.com,
|
||||
brian@fresnelsoft.com)
|
||||
|
||||
|
||||
1.7) Why won't it link? (Problems with lorder)
|
||||
|
||||
According to the IRIX man pages, lorder is useless, but harmless
|
||||
under IRIX. However, it has caused problems for some people
|
||||
using both IRIX 6.2.
|
||||
|
||||
The solution is to add the following line to
|
||||
.../src/makefiles/Makefile.irix5
|
||||
|
||||
MK_NO_LORDER=true
|
||||
|
||||
|
||||
1.8) I have major problems with IRIX 6!
|
||||
|
||||
The following is quoted directly from Bob Bruccoleri <bruc@bms.com>
|
||||
|
||||
There is a really nasty loader bug in the compiler system (7.1)
|
||||
on Irix 6.x, and the error that Lasse Petersen is the result of it.
|
||||
Here is the original message. I don't know if all the changes have been
|
||||
folded into the current release.
|
||||
|
||||
Date: Fri, 06 Jun 1997 17:12:20 -0400 (EDT)
|
||||
From: bruc@bms.com (Robert Bruccoleri)
|
||||
Subject: [PORTS] Patches for Irix 6.4
|
||||
|
||||
I have worked out how to compile PostgreSQL on Irix 6.4 using the -n32 compiler
|
||||
mode and version 7.1 of the C compiler. (The n32 compiler use 32 bits addressing,
|
||||
but allows access to all the instructions in the MIPS4 instruction set.)
|
||||
There were several problems:
|
||||
|
||||
1) The ld command is not referenced as a macro in all the Makefiles. On
|
||||
this platform, you have to include -n32 on all the ld commands. Makefiles
|
||||
were changed as needed.
|
||||
|
||||
2) There is a bug in "ld" which mishandles the addresses of static procedures
|
||||
when object files are assembled into larger object files using "ld -r".
|
||||
Because of this, I put a hack into src/backend/Makefile to avoid all the
|
||||
SUBSYS.o files and just link all the objects. I have contacted SGI about the
|
||||
problem, and hopefully, it will be fixed in the near future.
|
||||
|
||||
3) Lots of warnings are generated from the compiler. Since the regression
|
||||
tests worked OK, I didn't attempt to fix them. If anyone wants the compilation
|
||||
log, please let me know, and I'll email it to you.
|
||||
|
||||
The version of postgresql was 970602. Here is Makefile.custom:
|
||||
|
||||
CUSTOM_COPT = -O2 -n32
|
||||
MK_NO_LORDER = 1
|
||||
LD = ld -n32
|
||||
CC += -n32
|
||||
|
||||
Here are the patches:
|
||||
|
||||
*** ./backend/access/Makefile.orig Sun Nov 10 00:00:15 1996
|
||||
- --- ./backend/access/Makefile Tue Jun 3 10:22:32 1997
|
||||
***************
|
||||
*** 8,13 ****
|
||||
- --- 8,16 ----
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
+ SRCDIR = ../..
|
||||
+ include ../../Makefile.global
|
||||
+
|
||||
OBJS = common/SUBSYS.o gist/SUBSYS.o hash/SUBSYS.o heap/SUBSYS.o \
|
||||
index/SUBSYS.o rtree/SUBSYS.o nbtree/SUBSYS.o transam/SUBSYS.o
|
||||
|
||||
|
||||
*** ./backend/bootstrap/Makefile.orig Fri Apr 18 06:00:23 1997
|
||||
- --- ./backend/bootstrap/Makefile Tue Jun 3 10:23:59 1997
|
||||
***************
|
||||
*** 38,44 ****
|
||||
all: SUBSYS.o
|
||||
|
||||
SUBSYS.o: $(OBJS)
|
||||
! ld -r -o SUBSYS.o $(OBJS)
|
||||
|
||||
# bootstrap.o's dependency on bootstrap_tokens.h is computed by the
|
||||
# make depend, but we state it here explicitly anyway because
|
||||
- --- 38,44 ----
|
||||
all: SUBSYS.o
|
||||
|
||||
SUBSYS.o: $(OBJS)
|
||||
! $(LD) -r -o SUBSYS.o $(OBJS)
|
||||
|
||||
# bootstrap.o's dependency on bootstrap_tokens.h is computed by the
|
||||
# make depend, but we state it here explicitly anyway because
|
||||
|
||||
*** ./backend/Makefile.orig Thu May 22 00:00:15 1997
|
||||
- --- ./backend/Makefile Thu Jun 5 16:47:27 1997
|
||||
***************
|
||||
*** 54,60 ****
|
||||
all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source
|
||||
|
||||
postgres: $(OBJS) ../utils/version.o
|
||||
! $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
||||
|
||||
$(OBJS): $(DIRS:%=%.dir)
|
||||
|
||||
- --- 54,64 ----
|
||||
all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source
|
||||
|
||||
postgres: $(OBJS) ../utils/version.o
|
||||
! # $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
||||
! -rm -f *.o
|
||||
! find . -name "*.o" -exec cp \{\} . \;
|
||||
! rm -f SUBSYS.o
|
||||
! $(CC) -o postgres *.o ../utils/version.o $(LDFLAGS)
|
||||
|
||||
$(OBJS): $(DIRS:%=%.dir)
|
||||
|
||||
***************
|
||||
*** 116,122 ****
|
||||
install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) fmgr.h\
|
||||
global1.bki.source local1_template1.bki.source \
|
||||
libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample
|
||||
!
|
||||
$(INSTALL) $(INSTL_EXE_OPTS) postgres $(BINDIR)/postgres
|
||||
ifeq ($(MAKE_EXPORTS), true)
|
||||
$(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP)
|
||||
- --- 120,126 ----
|
||||
install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) fmgr.h\
|
||||
global1.bki.source local1_template1.bki.source \
|
||||
libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample
|
||||
!
|
||||
$(INSTALL) $(INSTL_EXE_OPTS) postgres $(BINDIR)/postgres
|
||||
ifeq ($(MAKE_EXPORTS), true)
|
||||
$(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP)
|
||||
|
||||
*** ./backend/optimizer/Makefile.orig Wed Feb 19 12:00:34 1997
|
||||
- --- ./backend/optimizer/Makefile Tue Jun 3 10:39:47 1997
|
||||
***************
|
||||
*** 8,13 ****
|
||||
- --- 8,16 ----
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
+ SRCDIR= ../..
|
||||
+ include ../../Makefile.global
|
||||
+
|
||||
all: submake SUBSYS.o
|
||||
|
||||
OBJS = path/SUBSYS.o plan/SUBSYS.o prep/SUBSYS.o util/SUBSYS.o geqo/SUBSYS.o
|
||||
|
||||
*** ./backend/libpq/pqcomprim.c.orig Mon May 26 00:00:23 1997
|
||||
- --- ./backend/libpq/pqcomprim.c Fri Jun 6 16:02:24 1997
|
||||
***************
|
||||
*** 32,40 ****
|
||||
# define hton_l(n) (ntoh_l(n))
|
||||
# else /* BYTE_ORDER != BIG_ENDIAN */
|
||||
# if BYTE_ORDER == PDP_ENDIAN
|
||||
! # #error PDP_ENDIAN macros not written yet
|
||||
# else /* BYTE_ORDER != anything known */
|
||||
! # #error BYTE_ORDER not defined as anything understood
|
||||
# endif /* BYTE_ORDER == PDP_ENDIAN */
|
||||
# endif /* BYTE_ORDER == BIG_ENDIAN */
|
||||
#endif /* BYTE_ORDER == LITTLE_ENDIAN */
|
||||
- --- 32,40 ----
|
||||
# define hton_l(n) (ntoh_l(n))
|
||||
# else /* BYTE_ORDER != BIG_ENDIAN */
|
||||
# if BYTE_ORDER == PDP_ENDIAN
|
||||
! # error PDP_ENDIAN macros not written yet
|
||||
# else /* BYTE_ORDER != anything known */
|
||||
! # error BYTE_ORDER not defined as anything understood
|
||||
# endif /* BYTE_ORDER == PDP_ENDIAN */
|
||||
# endif /* BYTE_ORDER == BIG_ENDIAN */
|
||||
#endif /* BYTE_ORDER == LITTLE_ENDIAN */
|
||||
|
||||
*** ./backend/storage/Makefile.orig Sun Nov 10 00:01:06 1996
|
||||
- --- ./backend/storage/Makefile Tue Jun 3 10:41:29 1997
|
||||
***************
|
||||
*** 8,13 ****
|
||||
- --- 8,16 ----
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
+ SRCDIR= ../..
|
||||
+ include ../../Makefile.global
|
||||
+
|
||||
all: submake SUBSYS.o
|
||||
|
||||
OBJS = buffer/SUBSYS.o file/SUBSYS.o ipc/SUBSYS.o large_object/SUBSYS.o \
|
||||
|
||||
|
||||
|
||||
|
||||
1.9) Why does lex fail with PostgreSQL 6.2.1?
|
||||
|
||||
IRIX 5.3 lex has been reported to fail in
|
||||
postgresql-6.2.1/src/backend/parser with the error:
|
||||
|
||||
lex scan.l
|
||||
"scan.l":line 86: Error: Invalid request %x xc
|
||||
gmake[2]: *** [scan.c] Error 1
|
||||
|
||||
The answer is to use GNU flex 2.5.4 or later. Use the command
|
||||
flex --version
|
||||
to check you have a new enough version of flex
|
||||
|
||||
|
||||
1.10) How do I install PostgreSQL V6.3 under Irix 6.x?
|
||||
|
||||
Irix 6.2-6.4 has a bug in ld which mishandles the addresses of
|
||||
static procedures when object files are assembled into
|
||||
larger object files using 'ld -r'. This bug has been reported
|
||||
to Silicon Graphics.
|
||||
|
||||
Depending on your Irix installation you may also encounter
|
||||
2 other problems detailed below: Conflict in C standards,
|
||||
Conflict in library functions.
|
||||
|
||||
a) Solving the ld bug
|
||||
---------------------
|
||||
|
||||
One option is to use the Gnu version of ld. Alternatively,
|
||||
the following patch should be applied as a workaround.
|
||||
(Supplied by Bob Bruccoleri <bruc@bms.com> and modified for
|
||||
PostgreSQL V6.3 by Lasse Hiller Petersen <lassehp@imv.aau.dk>)
|
||||
|
||||
Apply the following patch:
|
||||
|
||||
*** ./backend/Makefile.orig Tue Mar 3 15:33:58 1998
|
||||
--- ./backend/Makefile Tue Mar 3 15:39:27 1998
|
||||
***************
|
||||
*** 63,69 ****
|
||||
global1.description
|
||||
local1_template1.description
|
||||
|
||||
postgres: $(OBJS) ../utils/version.o
|
||||
! $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
||||
|
||||
$(OBJS): $(DIRS:%=%.dir)
|
||||
|
||||
--- 63,73 ----
|
||||
global1.description
|
||||
local1_template1.description
|
||||
|
||||
postgres: $(OBJS) ../utils/version.o
|
||||
! # $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
|
||||
! -rm -f *.o
|
||||
! find . -name "*.o" -exec cp \{\} . \;
|
||||
! rm -f SUBSYS.o
|
||||
! $(CC) -o postgres *.o ../utils/version.o $(LDFLAGS)
|
||||
|
||||
$(OBJS): $(DIRS:%=%.dir)
|
||||
|
||||
|
||||
|
||||
|
||||
Lasse configured with ./configure --enable-locale
|
||||
and modified Makefile.custom to contain:
|
||||
CC = cc -n32
|
||||
LD = ld -n32
|
||||
|
||||
He reports that the installation without -n32 works fine too,
|
||||
but the -n32 was required for compatibility with his Perl
|
||||
installation. His system was an Origin200 running IRIX64 v6.4.
|
||||
|
||||
|
||||
b) Conflict in C standards
|
||||
--------------------------
|
||||
|
||||
I have found that the following patch is also necessary in order
|
||||
to prevent a duplicate definition of a Union used for semaphores.
|
||||
Apply the following patch to:
|
||||
.../src/makefile/Makefile.irix5:
|
||||
|
||||
*** src/makefiles/Makefile.irix5.orig Thu Mar 5 16:59:58 1998
|
||||
--- src/makefiles/Makefile.irix5 Thu Mar 5 17:01:13 1998
|
||||
***************
|
||||
*** 6,9 ****
|
||||
%.so: %.o
|
||||
$(LD) -G -Bdynamic -shared -o $@ $<
|
||||
|
||||
!
|
||||
--- 6,9 ----
|
||||
%.so: %.o
|
||||
$(LD) -G -Bdynamic -shared -o $@ $<
|
||||
|
||||
! CFLAGS+= -U_NO_XOPEN4
|
||||
|
||||
i.e. the addition of the line:
|
||||
CFLAGS+= -U_NO_XOPEN4
|
||||
|
||||
This is needed to stop the semun union being redefined in
|
||||
/usr/include/sys/sem.h
|
||||
|
||||
c) Conflict in library functions
|
||||
--------------------------------
|
||||
|
||||
In addition, if you have the nsl and crypt libraries these will
|
||||
conflict with the required definitions. I think that libnsl.a
|
||||
may be the Netware socket library (or something similar). In
|
||||
any case, if you have these libraries, they will be added to
|
||||
Makefile.global and you will need to remove them.
|
||||
|
||||
Thus, you should edit .../src/Makefile.global. Goto (approximately)
|
||||
line 217 where LDFLAGS= is set and remove -lnsl and -lcrypt
|
||||
from this line.
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 2: Deinstalling PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
|
||||
2.1) Why can't I move the executable files?
|
||||
|
||||
By default, the IRIX port uses the BSD compatible version of
|
||||
install from /usr/bin/X11. If you read the man page for this
|
||||
version of install, you will see that it is not meant for
|
||||
end-user use; it has the interesting side-effect of chowning
|
||||
files it installs to root.
|
||||
|
||||
You should still be able to delete the files as you (the
|
||||
postgres user) will own the directory in which they are
|
||||
stored.
|
||||
|
||||
The normal IRIX install program cannot be used easily as it
|
||||
takes its arguments in the reverse order. It is therefore
|
||||
recommended to use the GNU version of install (ginstall).
|
||||
See Question 1.4
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 3: Extending PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
3.1) How do I compile a C program to create a function for extending
|
||||
PostgreSQL
|
||||
|
||||
Here is a sample command line:
|
||||
|
||||
cc -I/usr/local/PostgreSQL/include/ -I/usr/local/PostgreSQL/src/backend
|
||||
-shared -o funcs.so funcs.c
|
||||
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
Dr. Andrew C.R. Martin University College London
|
||||
EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk
|
||||
URL: http://www.biochem.ucl.ac.uk/~martin
|
||||
Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775
|
||||
</PRE>
|
704
doc/src/FAQ/FAQ_linux.html
Normal file
704
doc/src/FAQ/FAQ_linux.html
Normal file
@ -0,0 +1,704 @@
|
||||
<PRE>
|
||||
=======================================================
|
||||
Frequently Asked Questions (FAQ) for PostgreSQL >= V6.1
|
||||
Linux Specific
|
||||
TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ
|
||||
=======================================================
|
||||
last updated: Fri Jun 19 13:35:00 BST 1998
|
||||
|
||||
current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
|
||||
original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
|
||||
|
||||
|
||||
Changes in this version (* = modified, + = new, - = removed):
|
||||
|
||||
+1.23) Why does the compile fail with messages about F_BOOLIN, F_BOOLOUT
|
||||
and F_BYTEAIN being undeclared?
|
||||
|
||||
This file is divided approximately as follows:
|
||||
1.*) Installing PostgreSQL
|
||||
2.*) Compiling accessory programs
|
||||
3.*) Runtime Problems
|
||||
|
||||
|
||||
Questions answered:
|
||||
1.1) What changes do I need to make to src/Makefile.global or
|
||||
src/Makefile.custom and are there any other changes needed?
|
||||
1.2) Why do I get problems with missing libreadline?
|
||||
1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h?
|
||||
1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h?
|
||||
1.5) My compile of the backend dies complaining about the include file
|
||||
dlfcn.h missing
|
||||
1.6) GCC complains about an ignored option -fpic
|
||||
1.7) I get warnings of the form
|
||||
warning: cast from pointer to integer of different size
|
||||
1.8) [SuSE-Linux 4.2-4.4] Where is curses and termcap?
|
||||
1.9) Why do I get problems with ld.so?
|
||||
1.10) Why do I get `yy_flush_buffer undefined' errors?
|
||||
1.11) How do I compile PostgreSQL on an a.out system?
|
||||
1.12) Why does make fail with:
|
||||
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
|
||||
make: /usr/bin/make: cannot execute binary file
|
||||
1.13) What are the references in X11_LIB to libsocket and libnsl in
|
||||
src/Makefile.global?
|
||||
1.14) [DEBIAN] Where is libtermcap?
|
||||
1.15) [REDHAT] Can I get PostgreSQL as an RPM?
|
||||
1.16) While trying to compile a development version under Linux, compilation
|
||||
fails with a message like:
|
||||
In file included from /usr/include/sys/sem.h:8,
|
||||
from ipc.c:37:
|
||||
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
|
||||
....
|
||||
make: *** [ipc.o] Error 1
|
||||
1.17) When compiling postgres, gcc reports signal 11 and aborts.
|
||||
1.18) Can I install 6.1.1 under MkLinux?
|
||||
1.19) Why does make exit or crash?
|
||||
1.20) How can I optimise for 486 or pentium processors
|
||||
1.21) Why do I get strange results with printing times (for example
|
||||
in the regression test 'timespan')?
|
||||
1.22) Why don't I get any shared libraries for libpq when I compile
|
||||
6.3.2?
|
||||
1.23) Why does the compile fail with messages about F_BOOLIN, F_BOOLOUT
|
||||
and F_BYTEAIN being undeclared?
|
||||
2.1) The linker fails to find libX11 when compiling pgtclsh
|
||||
3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when
|
||||
running scripts like createuser
|
||||
3.2) I run postmaster and after that system says 'Bad system call(Core
|
||||
dumped)'
|
||||
3.3) When I try to start the Postmaster, why do I get an error of the form
|
||||
Failed Assertion("!(file != 0):(null)", File:
|
||||
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
|
||||
!(file != 0) (0)
|
||||
initdb: could not create template database
|
||||
initdb: cleaning up.
|
||||
3.4) Why doesn't createuser work?
|
||||
3.5) Why do I get an error like:
|
||||
IpcMemoryCreate: memKey=155356396 , size=760632 ,
|
||||
permission=384IpcMemoryCreate: shmget(..., create, ...)
|
||||
failed: Invalid argument
|
||||
3.6) Why does psql fail with:
|
||||
psql: can't load library 'libpq.so.1'
|
||||
3.7) Other strange behaviour
|
||||
3.8) When PostgreSQL is running when the system is shutdown, Linux
|
||||
always fsck's the disk when rebooted.
|
||||
3.9) Why does Query 32 in the regression tests take so long?
|
||||
3.10) Why do I get funny rounding results in some date/time arithmetic,
|
||||
such as
|
||||
select '4 hours'::timespan;
|
||||
returning '3 hours 59 minutes 60 seconds'?
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 1: Compiling PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
|
||||
1.1) What changes do I need to make to src/Makefile.global or
|
||||
src/Makefile.custom and are there any other changes needed?
|
||||
|
||||
Changes to the makefiles are most easily made by running the
|
||||
customize shell script in the src directory which will write a
|
||||
Makefile.custom for you.
|
||||
|
||||
The only other change you may have to make is to replace
|
||||
Flex if you have version 2.5.3 which has a bug which generally
|
||||
manifests itself as createuser failing (See Question 3.4)
|
||||
|
||||
If you modify the makefiles by hand, you *must* set the
|
||||
following variable:
|
||||
PORTNAME= linux
|
||||
|
||||
You will also need to change the following to match your own
|
||||
installation:
|
||||
POSTGRESDIR
|
||||
|
||||
If you switch on the USE_TCL option, you will need to set these:
|
||||
TCL_INCDIR=
|
||||
TCL_LIBDIR=
|
||||
TCL_LIB=
|
||||
TK_INCDIR=
|
||||
TK_LIBDIR=
|
||||
TK_LIB=
|
||||
X11_INCDIR=
|
||||
X11_LIBDIR=
|
||||
X11_LIB=
|
||||
|
||||
On my Slackware3.0 system, these are:
|
||||
TCL_INCDIR= /usr/include/tcl
|
||||
TCL_LIBDIR= /usr/lib
|
||||
TCL_LIB= -ltcl
|
||||
TK_INCDIR= /usr/include/tcl
|
||||
TK_LIBDIR= /usr/lib
|
||||
TK_LIB= -ltk
|
||||
X11_INCDIR= /usr/include/X11
|
||||
X11_LIBDIR= /usr/X386/lib
|
||||
X11_LIB= -lX11
|
||||
|
||||
You may also make any other changes you need as documented in
|
||||
the INSTALL file and in Makefile.global
|
||||
|
||||
|
||||
1.2) Why do I get problems with missing libreadline?
|
||||
|
||||
Linux systems generally don't come with the GNU readline library
|
||||
installed. Either ensure you do not activate the readline options
|
||||
in src/Makefile.global or src/Makefile.custom or install the GNU
|
||||
readline library.
|
||||
|
||||
Note that Debian Linux (like FreeBSD) does come with readline
|
||||
installed.
|
||||
|
||||
1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h?
|
||||
|
||||
This manifests itself as being unable to link with functions
|
||||
such as dlopen(), dlclose(), etc. during the last phase of the
|
||||
compilation.
|
||||
|
||||
The libdl library is used for dynamic linking of user-supplied
|
||||
functions at run-time. For some reason this library was missed out
|
||||
from the Redhat distribution. It seems that the latest Redhat 4.0
|
||||
(Colgate) fixes this.
|
||||
|
||||
RedHat now have a new ld.so RPM package on their FTP site.
|
||||
Simply grab:
|
||||
|
||||
ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm
|
||||
|
||||
Install the RPM file in the usual way and off you go!
|
||||
|
||||
NOTE! You will have to re-run configure and do a make clean
|
||||
after installing the library and before recompiling.
|
||||
|
||||
There has been one report of a corrupted system resulting from
|
||||
programs accessing these libraries while updating them (not
|
||||
altogether surprising). Consequently it is a good idea to reboot
|
||||
the system before installing the new libraries and to
|
||||
have as little running as possible during this upgrade. Going
|
||||
into single-user mode is probably a good idea!
|
||||
|
||||
If you want to do it the hard way, you can obtain the library and the
|
||||
header file from:
|
||||
|
||||
ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz
|
||||
|
||||
Alternatively, you may find precompiled binaries in
|
||||
distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb
|
||||
on the same site, or follow the instructions given for question 1.2 for
|
||||
correcting the same error with early releases of Slackware 3.1.
|
||||
Don't use this method unless you know what you are doing!
|
||||
|
||||
|
||||
|
||||
1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h?
|
||||
|
||||
This manifests itself as being unable to link with functions
|
||||
such as dlopen(), dlclose(), etc. during the last phase of the
|
||||
compilation.
|
||||
|
||||
See the answer to question 1.3. Slackware up to version 3.0 was
|
||||
supplied with this library and include file and they seem to be
|
||||
back in again in the latest versions of 3.1, but the early 3.1
|
||||
releases (before 9th September 1996) had them missing and many
|
||||
CD-ROM versions will have been pressed from the first 3.1 releases.
|
||||
|
||||
There has been one report of a corrupted system resulting from
|
||||
programs accessing these libraries while updating them (not
|
||||
altogether surprising). Consequently it is a good idea to reboot
|
||||
the system before installing the new libraries and to
|
||||
have as little running as possible during this upgrade. Going
|
||||
into single-user mode is probably a good idea!
|
||||
|
||||
The easiest fix is to obtain the file ldso.tgz from the a4 disk of
|
||||
a more recent Slackware distribution and unpack this file
|
||||
from the root (/) directory, then do
|
||||
|
||||
sh install/doinst.sh
|
||||
|
||||
to complete the installation. Follow this with
|
||||
|
||||
ldconfig
|
||||
|
||||
NOTE! You will have to re-run configure and do a make clean
|
||||
after installing the library and before recompiling.
|
||||
|
||||
If you want to install manually, you must first install the file
|
||||
dlfcn.h in /usr/include.
|
||||
|
||||
Second, install the file libdl.so.1.7.14 (or whatever the latest
|
||||
release is) in /lib, then do:
|
||||
|
||||
cd /lib
|
||||
ln -sf libdl.so.1.7.14 libdl.so.1
|
||||
ln -sf libdl.so.1 libdl.so
|
||||
|
||||
On some systems (depending on your GCC configuration) it may be
|
||||
necessary to do:
|
||||
|
||||
cd /usr/lib
|
||||
ln -sf /lib/libdl.so .
|
||||
|
||||
Finally
|
||||
|
||||
ldconfig
|
||||
|
||||
NOTE! You will have to re-run configure and do a make clean
|
||||
after installing the library and before recompiling.
|
||||
|
||||
|
||||
1.5) My compile of the backend dies complaining about the include file
|
||||
dlfcn.h missing
|
||||
|
||||
See the answer to question 1.3/1.4. Don't forget that if you are using
|
||||
an a.out system you must first have installed the dld package
|
||||
(which is not supplied with most a.out systems) to have dlfcn.h
|
||||
at all. See Question 1.11.
|
||||
|
||||
|
||||
1.6) GCC complains about an ignored option -fpic
|
||||
|
||||
Earlier versions of GCC accepted either -fpic or -fPIC.
|
||||
It appears that more recent versions (V2.7.2?) require -fPIC.
|
||||
If you are using an ELF version of Linux, this can safely be
|
||||
ignored as -fPIC is the default.
|
||||
|
||||
You can correct this by editing src/Makefile.global and
|
||||
changing CFLAGS_SL
|
||||
|
||||
|
||||
1.7) I get warnings of the form
|
||||
warning: cast from pointer to integer of different size
|
||||
|
||||
These were seen in earlier versions of Postgres95 and could
|
||||
safely be ignored. PostgreSQL V6.0 should compile with no warnings
|
||||
except those related to system header files (which can also
|
||||
be safely ignored).
|
||||
|
||||
1.8) [SuSE-Linux 4.2-4.4] Where is curses and termcap?
|
||||
|
||||
SuSE-Linux 4.2 has ncurses but not curses. 4.4 appears to have both.
|
||||
SuSE-Linux also has the termcap library is in /usr/lib/termcap
|
||||
instead of in /usr/lib.
|
||||
|
||||
PostgreSQL (up to V6.0)
|
||||
-----------------------
|
||||
Set the value of CURSES_LIB in src/Makefile.custom to -lncurses
|
||||
(or do this through the customize script).
|
||||
Add the following line to src/Makefile.custom:
|
||||
|
||||
LDADD_BE+= -L/usr/lib/termcap
|
||||
|
||||
You may need to edit src/bin/psql/Makefile and change:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+=
|
||||
to:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+= -ltermcap
|
||||
|
||||
PostgreSQL (V6.1)
|
||||
-----------------
|
||||
The configure script doesn't know to look in /usr/lib/termcap for
|
||||
the termcap library, so you should specify this as one of the
|
||||
library directories when asked for additional directories to
|
||||
search.
|
||||
|
||||
If this doesn't work (I don't have SuSE to verify that it does)
|
||||
then after running configure, you need to edit
|
||||
src/Makefile.global and add -ltermcap to the LDFLAGS line
|
||||
(after -lreadline). (Alternatively, you can modify
|
||||
src/Makefile.custom before running configure.)
|
||||
|
||||
Some versions of SuSE provide only ncurses, so you may need
|
||||
to force use of ncurses rather than curses by changing
|
||||
-lcurses to -lncurses. (Reported true for SuSE 5.1)
|
||||
|
||||
|
||||
1.9) Why do I get problems with ld.so?
|
||||
|
||||
If you get problems with ld.so, another library required under
|
||||
ELF for dynamic loading, then you have messed up your installation
|
||||
or (more likely) upgrade of Linux.
|
||||
|
||||
See the answers to Question 1.3/1.4. You may need to install
|
||||
ld.so.x.y.z in /lib and run ldconfig.
|
||||
|
||||
The most recent stable release of the ld package is 1.7.14
|
||||
At the time of writing, 1.8.x versions of ld are experimental.
|
||||
|
||||
1.10) Why do I get `yy_flush_buffer undefined' errors?
|
||||
|
||||
This isn't really Linux specific, but is common on older Linux
|
||||
installations. You must have a recent version of flex (2.5.2 or later)
|
||||
to compile PostgreSQL. Note that flex 2.5.3 has a bug: see
|
||||
Question 3.4.
|
||||
|
||||
1.11) How do I compile PostgreSQL on an a.out system?
|
||||
|
||||
First, you must install the dld library. This may be obtained
|
||||
from Sunsite as:
|
||||
Linux/libs/dld.3.2.7.tar.gz
|
||||
(ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz)
|
||||
|
||||
Second, add the following line to src/Makefile.custom:
|
||||
LINUX_ELF=
|
||||
(or use the customize script)
|
||||
|
||||
1.12) Why does make fail with:
|
||||
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
|
||||
make: /usr/bin/make: cannot execute binary file
|
||||
|
||||
This was a problem in earlier versions of Postgres95. The default
|
||||
for PostgreSQL is to use bison -y rather than yacc.
|
||||
|
||||
yacc is generally implemented as a script which invokes bison -y
|
||||
For some reason (certain versions of make? certain versions of
|
||||
bash?) make is unable to execute this script file.
|
||||
|
||||
To correct this, simply edit src/mk/port/postgres.mk.linux
|
||||
and, at the end of the file, change:
|
||||
# YACC = bison -y
|
||||
to
|
||||
YACC = bison -y
|
||||
|
||||
1.13) What are the references in X11_LIB to libsocket and libnsl in
|
||||
src/Makefile.global?
|
||||
|
||||
This was a problem in 1.08 (they are Sun Solaris specific).
|
||||
It is fixed in 1.09 and 6.0
|
||||
|
||||
1.14) [DEBIAN] Where is libtermcap?
|
||||
|
||||
Debian Linux comes without the termcap library and uses ncurses
|
||||
(which uses terminfo instead). There is no need to change the
|
||||
CURSES_LIB variable in src/bin/psql/Makefile since Debian provides
|
||||
a link from libncurses to libcurses (unlike SuSE-Linux --- see
|
||||
Question 1.8).
|
||||
|
||||
You may need to edit src/bin/psql/Makefile and comment out the
|
||||
change:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+= -ltermcap
|
||||
to:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+=
|
||||
|
||||
|
||||
1.15) [REDHAT] Can I get PostgreSQL as an RPM?
|
||||
|
||||
Yes! Michal Mosiewicz <mimo@lodz.pdi.net>
|
||||
(http://www.pdi.lodz.pl/~mimo) has kindly put together an RPM
|
||||
for PostgreSQL V6.0 on Intel architectures which he has uploaded to
|
||||
ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm
|
||||
|
||||
This is a pre-compiled version, the source RPM is on its
|
||||
was as I write (3rd Feb 1997).
|
||||
|
||||
1.16) While trying to compile a development version under Linux, compilation
|
||||
fails with a message like:
|
||||
In file included from /usr/include/sys/sem.h:8,
|
||||
from ipc.c:37:
|
||||
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
|
||||
....
|
||||
make: *** [ipc.o] Error 1
|
||||
|
||||
The problem is that Linux provides no prototypes for these
|
||||
inline functions. The solution is to go into the
|
||||
.../src/backend/storage/ipc directory and edit the Makefile.
|
||||
Change the line
|
||||
CFLAGS+=$(INCLUDE_OPT)
|
||||
to
|
||||
CFLAGS+=$(INCLUDE_OPT) -Wno-error
|
||||
|
||||
Do the same in the ../src/backend/storage/lmgr directory.
|
||||
|
||||
1.17) When compiling postgres, gcc reports signal 11 and aborts.
|
||||
More specifically:
|
||||
gcc: Internal compiler error: program cc1 got fatal
|
||||
signal 11
|
||||
|
||||
This may be a hardware/memory problem. PortgreSQL is a big
|
||||
program, and large gcc compilations (such as building
|
||||
PostgreSQL or bebuilding the kernel) stress memory like
|
||||
few other programs, resulting in errors that do not occur
|
||||
in normal operation. Lesser operating systems are also
|
||||
unlikely to stress the hardware to this degree so you
|
||||
may never see any problems under DOS/Windows.
|
||||
|
||||
More information on this problem at:
|
||||
http://www.bitwizard.nl/sig11
|
||||
|
||||
From this Sig11 FAQ, there appears to be a specific problem
|
||||
with Redhat 5.0 gcc running on Cyrix processors. See the
|
||||
URL above for more details!
|
||||
|
||||
1.18) Can I install 6.1.1 under MkLinux?
|
||||
|
||||
Tatsuo Ishii <t-ishii@sra.co.jp> has done this under
|
||||
MkLinux DR2.1 update2 after a small patch available from:
|
||||
ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz
|
||||
|
||||
1.19) Why does make exit or crash?
|
||||
|
||||
There have been a couple of reports of gmake either just
|
||||
exiting early or seg faulting. The latter problem was reported
|
||||
with gmake 3.74 - upgrading to 3.76.1 solved the problem.
|
||||
However, 3.74 is known to work fine in other people's setups.
|
||||
In short, try upgrading gmake to the latest version you can
|
||||
find before reporting this as a problem
|
||||
|
||||
1.20) How can I optimise for 486 or pentium processors
|
||||
|
||||
The default compiler flags perform no optimisation for 486
|
||||
or Pentium processors. To add such optimisation, edit
|
||||
Makefile.custom and add:
|
||||
|
||||
CFLAGS+= -m486
|
||||
|
||||
or (for the new compilers that most people are not yet running)
|
||||
|
||||
CFLAGS+= -mpentium
|
||||
or
|
||||
CFLAGS+= -mpentiumpro
|
||||
|
||||
1.21) Why do I get strange results with printing times (for example
|
||||
in the regression test 'timespan')?
|
||||
The times are appearing as: '4 hours 59 mins 60.00 secs'
|
||||
instead of '5 hours'
|
||||
|
||||
This is a problem with the glibc2 library which comes with
|
||||
Redhat 5.0. Update your glibc to the latest RedHat version
|
||||
for v5.0/hurricane. Anything prior to glibc-2.0.7 is likely
|
||||
to have the problem.
|
||||
|
||||
1.22) Why don't I get any shared libraries for libpq when I compile
|
||||
6.3.2?
|
||||
|
||||
There was some last minute breakage of the Linux configuration for
|
||||
v6.3.2. Look in ftp://postgresql.org/pub/patches/ for a few fix-ups,
|
||||
including a linux_elf patch.
|
||||
|
||||
1.23) Why does the compile fail with messages about F_BOOLIN, F_BOOLOUT
|
||||
and F_BYTEAIN being undeclared?
|
||||
|
||||
The actual messages are something like:
|
||||
|
||||
-I/usr/include/readline -O2 -Wall -Wmissing-prototypes -I..
|
||||
-Wno-error -c bootstrap.c -o bootstrap.o
|
||||
bootstrap.c:160: `F_BOOLIN' undeclared here (not in a function)
|
||||
bootstrap.c:160: initializer element for `Procid[0].inproc' is not
|
||||
constant
|
||||
bootstrap.c:160: `F_BOOLOUT' undeclared here (not in a function)
|
||||
bootstrap.c:160: initializer element for `Procid[0].outproc' is not
|
||||
constant
|
||||
bootstrap.c:161: `F_BYTEAIN' undeclared here (not in a function)
|
||||
bootstrap.c:161: initializer element for `Procid[1].inproc' is not
|
||||
constant
|
||||
|
||||
This is tricky unless you know why it happens, as these constants
|
||||
don't seem to be defined anywhere.
|
||||
|
||||
The solution is to make sure that cpp is included in your path
|
||||
before you start the make.
|
||||
|
||||
On Redhat 5.1, cpp is in /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 2: Compiling accessory programs
|
||||
----------------------------------------------------------------------
|
||||
|
||||
2.1) The linker fails to find libX11 when compiling pgtclsh
|
||||
|
||||
Add the following to src/Makefile.custom
|
||||
X11_LIBDIR = /usr/X11R6/lib
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 3: Runtime Problems
|
||||
----------------------------------------------------------------------
|
||||
|
||||
3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when
|
||||
running scripts like createuser
|
||||
|
||||
This is a bug in V1.06-V1.07 of Postgres and is fixed in V1.08
|
||||
and above.
|
||||
|
||||
3.2) I run postmaster and after that system says 'Bad system call(Core
|
||||
dumped)'
|
||||
|
||||
This indicates that you have not compiled shared memory support
|
||||
into your kernel. You need to recompile the Linux kernel to add this
|
||||
feature.
|
||||
|
||||
|
||||
3.3) When I try to start the Postmaster, why do I get an error of the form
|
||||
Failed Assertion("!(file != 0):(null)", File:
|
||||
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
|
||||
!(file != 0) (0)
|
||||
initdb: could not create template database
|
||||
initdb: cleaning up.
|
||||
|
||||
Your permissions on the file /dev/null are wrong.
|
||||
|
||||
ls -l /dev/null should give you something like:
|
||||
|
||||
crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null
|
||||
|
||||
Correct the permissions using:
|
||||
|
||||
chmod a+rw /dev/null
|
||||
|
||||
3.4) Why doesn't createuser work?
|
||||
|
||||
There is a problem with Version 2.5.3 of GNU flex and createuser.
|
||||
Your options are to downgrade flex to V2.5.2, upgrade to V2.5.4
|
||||
or apply a patch to V2.5.3 which is supplied in doc/README.flex
|
||||
You may obtain V2.5.4 from
|
||||
ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz
|
||||
|
||||
3.5) Why do I get an error like:
|
||||
IpcMemoryCreate: memKey=155356396 , size=760632 ,
|
||||
permission=384IpcMemoryCreate: shmget(..., create, ...)
|
||||
failed: Invalid argument
|
||||
|
||||
You haven't build IPC support into your Linux kernel. You
|
||||
will have to rebuild the kernel and switch on this option.
|
||||
|
||||
3.6) Why does psql fail with:
|
||||
psql: can't load library 'libpq.so.1'
|
||||
|
||||
Psql has been compiled to link dynamically with the libpq
|
||||
library.
|
||||
|
||||
To solve this, you should log in as root and edit the file
|
||||
/etc/ld.so.conf
|
||||
Add a single line at the end which gives the name of the
|
||||
PostgreSQL library directory (the lib subdirectory of your
|
||||
PostgreSQL installation) and run
|
||||
/sbin/ldconfig -v
|
||||
|
||||
Alternatively, (and if you don't have root access), you may
|
||||
use the LD_LIBRARY_PATH environment variable.
|
||||
|
||||
The LD_LIBRARY_PATH variable contains a colon separated list of
|
||||
paths to be searched for shared libraries. This list is
|
||||
searched before the libraries specified by ldconfig.
|
||||
|
||||
Therefore under Bash, you would do something like:
|
||||
export LD_LIBRARY_PATH='PathToPGSQL'/lib
|
||||
or, using tcsh
|
||||
setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
|
||||
replacing 'PathToPGSQL' with the appropriate path to your top level
|
||||
PostgreSQL directory
|
||||
|
||||
Note that the ldd command can be used on a dynamically linked
|
||||
executable to list the paths to all the shared libraries upon
|
||||
which the executable depends.
|
||||
|
||||
|
||||
3.7) Other strange behaviour
|
||||
|
||||
I'm not sure what the symptoms might be except for nothing
|
||||
working properly, but it has been pointed out that one needs
|
||||
to be careful that the dynamic loader loads the correct version
|
||||
of the libpq library. If you have old versions lying around
|
||||
in your library path (for example in /usr/lib) these may get
|
||||
loaded instead of the new version you intended to load. Make
|
||||
sure you get them out of the way and look at Q3.6 for
|
||||
details of loading libraries.
|
||||
|
||||
3.8) When PostgreSQL is running when the system is shutdown, Linux
|
||||
always fsck's the disk when rebooted.
|
||||
|
||||
There have been some reports of this happening and it seems
|
||||
to be a result of running PostgreSQL from /etc/inittab as
|
||||
suggested in the INSTALL document.
|
||||
|
||||
You are therefore recommended to start the postmaster from an
|
||||
rc script. Under a Slackware-like release, you would modify
|
||||
/etc/rc.d/rc.local to start the postmaster. Under a RedHat-like
|
||||
release you should create a SysV style script in
|
||||
/etc/rc.d/rc3.d based on the /etc/rc.d/init.d skeleton file.
|
||||
|
||||
There's a sample file in contrib/linux/postgres.init
|
||||
|
||||
Here's another sample file supplied by John Robinson
|
||||
<john@intelligent.co.uk> which you should modify as needed:
|
||||
|
||||
#!/bin/sh
|
||||
#
|
||||
# postgreSQL.init This shell script takes care of starting and stopping
|
||||
# the PostgreSQL postmaster.
|
||||
#
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
# Source networking configuration.
|
||||
. /etc/sysconfig/network
|
||||
|
||||
# Check that networking is up.
|
||||
[ ${NETWORKING} = "no" ] && exit 0
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start)
|
||||
# Start daemons.
|
||||
echo -n "Starting postgres Postmaster daemon:"
|
||||
if [ -z "`pidofproc postmaster`" ]
|
||||
then
|
||||
su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &"
|
||||
echo -n " postmaster"
|
||||
else
|
||||
echo -n " (already running)"
|
||||
fi
|
||||
echo
|
||||
touch /var/lock/subsys/postgres
|
||||
;;
|
||||
stop)
|
||||
# Stop daemons.
|
||||
echo -n "Shutting down postgres Postmaster daemon: "
|
||||
killall -TERM postmaster 2>/dev/null
|
||||
killall -TERM postgres 2>/dev/null
|
||||
echo
|
||||
rm -f /var/lock/subsys/postgres
|
||||
;;
|
||||
*)
|
||||
echo "Usage: postgres {start|stop}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
|
||||
3.9) Why does Query 32 in the regression tests take so long?
|
||||
|
||||
This is due to a bug in regression scripts which only happens
|
||||
on linux boxes. There are two workarounds as far as I know
|
||||
(information from Tatsuo Ishii <t-ishii@sra.co.jp>):
|
||||
|
||||
1. change following in regress.sh:
|
||||
time postgres -texecutor -tplanner -Q bench < bench.sql
|
||||
to:
|
||||
postgres -texecutor -tplanner -Q bench < bench.sql
|
||||
|
||||
2. after running the test, remove a line at the very end of
|
||||
bench.out something like:
|
||||
85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k
|
||||
then type:
|
||||
sh ./perquery < bench.out > & bench.out.perquery
|
||||
|
||||
|
||||
|
||||
3.10) Why do I get funny rounding results in some date/time arithmetic,
|
||||
such as
|
||||
select '4 hours'::timespan;
|
||||
returning '3 hours 59 minutes 60 seconds'?
|
||||
|
||||
You are running the new glibc2 libraries and have a version earlier than
|
||||
2.0.7. It is a math rounding problem in the library. Upgrade your library.
|
||||
----------------------------------------------------------------------------
|
||||
Dr. Andrew C.R. Martin University College London
|
||||
EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk
|
||||
URL: http://www.biochem.ucl.ac.uk/~martin
|
||||
Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775
|
||||
</PRE>
|
748
doc/src/FAQ/FAQ_linux_german.html
Normal file
748
doc/src/FAQ/FAQ_linux_german.html
Normal file
@ -0,0 +1,748 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>Linux PostgreSQL FAQ (german)</TITLE>
|
||||
<META NAME="Author" CONTENT="Karsten Schulz">
|
||||
<META NAME="GENERATOR" CONTENT="all pages hand-made by Karsten Schulz, using NEdit (Linux)">
|
||||
<META http-equiv="content-type" CONTENT="text/html;CHARSET=iso8859-1">
|
||||
<META NAME="robots" CONTENT="index">
|
||||
<META NAME="robots" CONTENT="follow">
|
||||
<META NAME="description" CONTENT="Die deutsche Übersetzung der Linux-spezifischen FAQ zum Datenbanksystem PostgreSQL">
|
||||
<META NAME="keywords" CONTENT="Linux, FAQ, DB, PostgreSQL, SQL, deutsch, german">
|
||||
<LINK REV=MADE HREF="mailto:schulz@Linux-Systemhaus.de" TITLE="Karsten Schulz">
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFFFF">
|
||||
|
||||
<CENTER><H1>Häufig gestellte Fragen (FAQ) zu PostgreSQL >= V6.1, Linux-spezifisch</H1>
|
||||
<STRONG>Bitte Zusammen mit der normalen FAQ lesen!</STRONG></CENTER>
|
||||
|
||||
<HR>
|
||||
<TABLE BORDER=0>
|
||||
<TR>
|
||||
<TD>Letztes Update des Originals:</TD>
|
||||
<TD>Tue Aug 10 11:15:00 BST 1999</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>Original-FAQ gepflegt durch:</TD>
|
||||
<TD>Andrew C.R. Martin (<A HREF="mailto:martin@biochem.ucl.ac.uk">martin@biochem.ucl.ac.uk</A>)</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>Original Autor:</TD>
|
||||
<TD>Andrew C.R. Martin (<A HREF="mailto:martin@biochem.ucl.ac.uk">martin@biochem.ucl.ac.uk</A>)</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN=2> </TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>Letztes Update der Übersetzung:</TD>
|
||||
<TD>Mo, 23. August 1999, 10:00 CEST</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>Übersetzer:</TD>
|
||||
<TD>Karsten Schulz (<A HREF="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</A>)</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<HR>
|
||||
<P>
|
||||
Änderungen in dieser Version (* = geändert, + = neu, - = entfernt)
|
||||
<P>
|
||||
|
||||
<A HREF="#3.11">+3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?<BR>
|
||||
|
||||
<H2>Diese Datei ist ungefähr wie folgt unterteilt:</H2>
|
||||
|
||||
<A HREF="#1.">1.*)</A> PostgreSQL kompilieren<BR>
|
||||
<A HREF="#2.">2.*)</A> Hilfs- und Zusatzprogramme kompilieren<BR>
|
||||
<A HREF="#3.">3.*)</A> Laufzeit Probleme<BR>
|
||||
<P><BR>
|
||||
|
||||
|
||||
<H2>Beantwortete Fragen:</H2>
|
||||
<A NAME="1."> </A><H3><A HREF="#Sec1">PostgreSQL kompilieren</A></H3>
|
||||
|
||||
|
||||
<A HREF="#1.1">1.1)</A> Welche Anpassungen müssen in src/Makefile.global oder src/Makefile.custom gemacht werden
|
||||
und gibt es weitere notwendige Änderungen?<BR>
|
||||
<A HREF="#1.2">1.2)</A> Warum habe ich Probleme mit der fehlenden Bibliothek libreadline?<BR>
|
||||
<A HREF="#1.3">1.3)</A> [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?<BR>
|
||||
<A HREF="#1.4">1.4)</A> [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?<BR>
|
||||
<A HREF="#1.5">1.5)</A> Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die Include-Datei dlfcn.h fehlen würde.<BR>
|
||||
<A HREF="#1.6">1.6)</A> GCC meldet, daß er die Option -fpic ignorieren würde.<BR>
|
||||
<A HREF="#1.7">1.7)</A> Ich bekomme Warnungen, wie: <EM>warning: cast from pointer to integer of different size</EM><BR>
|
||||
<A HREF="#1.8">1.8)</A> [SuSE-Linux 4.2-5.3] Wo sind curses und termcap?<BR>
|
||||
<A HREF="#1.9">1.9)</A> Warum bekomme ich Probleme mit ld.so?<BR>
|
||||
<A HREF="#1.10">1.10)</A> Wieso bekomme ich <EM>yy_flush_buffer undefined</EM> Fehler?<BR>
|
||||
<A HREF="#1.11">1.11)</A> Wie kompiliere ich PostgreSQL auf einem a.out System?<BR>
|
||||
<A HREF="#1.12">1.12)</A> Warum scheitert make mit der Meldung:<BR><EM>
|
||||
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
|
||||
make: /usr/bin/make: cannot execute binary file</EM><BR>
|
||||
<A HREF="#1.13">1.13)</A> Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl in der Datei src/Makefile.global?<BR>
|
||||
<A HREF="#1.14">1.14)</A> [DEBIAN] Wo ist die Bibliothek libtermcap?<BR>
|
||||
<A HREF="#1.15">1.15)</A> [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen?<BR>
|
||||
<A HREF="#1.16">1.16)</A> Während ich versuche eine Entwickler-Version unter Linux zu kompilieren, bricht der Vorgang mit folgender
|
||||
Fehlermeldung ab:<BR><EM>
|
||||
In file included from /usr/include/sys/sem.h:8,<BR>
|
||||
from ipc.c:37:<BR>
|
||||
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'<BR>
|
||||
....<BR>
|
||||
make: *** [ipc.o] Error 1</EM><BR>
|
||||
<A HREF="#1.17">1.17)</A> Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 Meldung ab.<BR>
|
||||
<A HREF="#1.18">1.18)</A> Kann ich Version 6.1.1 unter MkLinux installieren?<BR>
|
||||
<A HREF="#1.19">1.19)</A> Warum stoppt make oder bricht sonstwie ab?<BR>
|
||||
<A HREF="#1.20">1.20)</A> Wie kann ich für die Prozessoren 486 oder Pentium optimieren?<BR>
|
||||
<A HREF="#1.21">1.21)</A> Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. beim Regressionstest 'timespan')?<BR>
|
||||
<A HREF="#1.22">1.22)</A> Warum bekomme ich keine shared libraries für libpq, wenn ich Version 6.3.2 kompiliere?<BR>
|
||||
<A HREF="#1.23">1.23)</A> Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien?<BR>
|
||||
|
||||
<P>
|
||||
|
||||
<A NAME="2."> </A><H3><A HREF="#Sec2">Hilfs- und Zusatzprogramme kompilieren</A></H3>
|
||||
|
||||
<A HREF="#2.1">2.1)</A> Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert werden soll.<BR>
|
||||
|
||||
|
||||
<A NAME="3."> </A><H3><A HREF="#Sec3">Laufzeit Probleme</A></H3>
|
||||
|
||||
<A HREF="#3.1">3.1)</A> Ich bekomme die Fehlermeldung <EM>_fUnKy_POSTPORT_sTuFf_ undefined</EM>, wenn Skripts wie createuser laufen.<BR>
|
||||
<A HREF="#3.2">3.2)</A> Nachdem ich postmaster starte, meldet das System <EM>Bad system call (Core dumped)</EM><BR>
|
||||
<A HREF="#3.3">3.3)</A> Wenn ich versuche, den Postmaster zu starten, bekomme ich eine Fehlermeldung wie:<BR><EM>
|
||||
Failed Assertion("!(file != 0):(null)", File:<BR>
|
||||
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)<BR>
|
||||
!(file != 0) (0)<BR>
|
||||
initdb: could not create template database<BR>
|
||||
initdb: cleaning up.</EM><BR>
|
||||
<A HREF="#3.4">3.4)</A> Warum funktioniert createuser nicht?<BR>
|
||||
<A HREF="#3.5">3.5)</A> Wieso bekomme ich einen Fehler, wie:<BR><EM>
|
||||
IpcMemoryCreate: memKey=155356396 , size=760632 ,<BR>
|
||||
permission=384IpcMemoryCreate: shmget(..., create, ...)<BR>
|
||||
failed: Invalid argument</EM><BR>
|
||||
<A HREF="#3.6">3.6)</A> Wieso scheitert der Aufruf von psql mit: <EM>psql: can't load library 'libpq.so.1</EM><BR>
|
||||
<A HREF="#3.7">3.7)</A> Andere seltsame Verhaltensweisen<BR>
|
||||
<A HREF="#3.8">3.8)</A> Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart jedesmal einen Filesystemcheck (fsck) durch<BR>
|
||||
<A HREF="#3.9">3.9)</A> Warum dauert Query 32 in den RegressionsTests so lange?<BR>
|
||||
<A HREF="#3.10">3.10)</A> Warum bekomme ich lustige Rundungsergebnisse in einigen Datums/Zeit-Berechnungen, wie:<BR><EM>
|
||||
select '4 hours'::timespan;<BR>
|
||||
liefert '3 hours 59 minutes 60 seconds'</EM>?<BR>
|
||||
<A HREF="#3.11">+3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?<BR>
|
||||
|
||||
<P>
|
||||
|
||||
<H3><A NAME="Sec1">Abschnitt 1: PostgreSQL kompilieren</A></H3>
|
||||
|
||||
<H4><A NAME="1.1">1.1)</A> Welche Anpassungen müssen in src/Makefile.global oder src/Makefile.custom gemacht werden
|
||||
und gibt es weitere notwendige Änderungen?</H4>
|
||||
|
||||
Änderungen an den Makefiles werden am einfachsten dadurch gemacht, indem das <EM>customize shellscript</EM>
|
||||
im src-Verzeichnis aufgerufen wird, das ein Makefile.custom erzeugt.
|
||||
<P>
|
||||
Die einzige andere Änderung, die evtl. zu machen wäre, ist Flex zu ersetzen, wenn Du die Version 2.5.3 hast.
|
||||
Diese Version hat einen Fehler, der sich durch das Scheitern des createuser-Programms äußert.
|
||||
(siehe dazu auch <A HREF="#3.4">Frage 3.4</A>).
|
||||
<P>
|
||||
Falls Du die Makefiles manuell änderst, <STRONG>musst</STRONG> Du die
|
||||
folgende Variable setzen:<BR><BR>
|
||||
<PRE>
|
||||
PORTNAME= linux
|
||||
</PRE>
|
||||
|
||||
Du musst auch die folgende Variable ändern, damit sie auf Deine
|
||||
Installation passt:
|
||||
<PRE>
|
||||
POSTGRESDIR
|
||||
</PRE>
|
||||
Falls Du die <EM>USE_TCL</EM>-Option aktivierst, musst Du folgende Variablen setzen:<BR><BR>
|
||||
|
||||
<PRE>
|
||||
TCL_INCDIR=
|
||||
TCL_LIBDIR=
|
||||
TCL_LIB=
|
||||
TK_INCDIR=
|
||||
TK_LIBDIR=
|
||||
TK_LIB=
|
||||
X11_INCDIR=
|
||||
X11_LIBDIR=
|
||||
X11_LIB=
|
||||
</PRE>
|
||||
|
||||
Auf meinem Slackware 3.0 System sind das:
|
||||
<PRE>
|
||||
TCL_INCDIR= /usr/include/tcl
|
||||
TCL_LIBDIR= /usr/lib
|
||||
TCL_LIB= -ltcl
|
||||
TK_INCDIR= /usr/include/tcl
|
||||
TK_LIBDIR= /usr/lib
|
||||
TK_LIB= -ltk
|
||||
X11_INCDIR= /usr/include/X11
|
||||
X11_LIBDIR= /usr/X386/lib
|
||||
X11_LIB= -lX11
|
||||
</PRE>
|
||||
<P>
|
||||
Du solltest auch alle weiteren Änderungen durchführen, die in der
|
||||
Datei INSTALL und in Makefile.global dokumentiert sind.
|
||||
|
||||
<H4><A NAME="1.2">1.2)</A> Warum habe ich Probleme mit der fehlenden Bibliothek libreadline?</H4>
|
||||
Linux Systeme kommen in der Regel nicht mit einer installierten GNU readline Bibliothek.
|
||||
Stelle entweder sicher, daß Du die readline-Optionen in src/Makefile.global oder
|
||||
src/Makefile.custom nicht aktivierst oder installiere die GNU readline Bibliothek.<BR>
|
||||
Hinweis: Debian Linux (wie FreeBSD) kommt mit einer installierten GNU readline Bibliothek.
|
||||
|
||||
<H4><A NAME="1.3">1.3)</A> [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?</H4>
|
||||
Das Problem erscheint dadurch, daß in der letzten Phase des Kompilierungsvorgangs Funktionen wie
|
||||
dlopen(), dlclose(), etc. nicht gelinkt werden können.
|
||||
<P>
|
||||
Die libdl Bibliothek wird zum dynamischen Linken von Benutzerfunktionen zur Laufzeit
|
||||
benutzt. Aus irgendwelchen Gründen wurde diese Bibliothek mit der RedHat-Distribution
|
||||
nicht ausgeliefert. Anscheinend ist dies in der letzten RedHat 4.0 (Colgate) geändert worden.
|
||||
<P>
|
||||
RedHat hat nun ein neues ld.so RPM-Archiv auf ihrem ftp-Server. Hole Dir einfach:
|
||||
<P>
|
||||
<A HREF="ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/">ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm</A>
|
||||
<P>
|
||||
Installiere das RPM-Archiv wie üblich und gut ist!
|
||||
<P>
|
||||
Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation
|
||||
der Bibliothek und vor dem erneuten Kompilieren laufen lassen.
|
||||
<P>
|
||||
Es gab einen Bericht über ein zerstörtes System, weil Programme auf
|
||||
diese Bibliothek während des Updates zugegriffen haben (alles in allem nicht
|
||||
weiter überraschend). Konsequenterweise ist es eine gute Idee, das System vor der
|
||||
Installation zu rebooten, um so wenige Programme wie möglich während
|
||||
des Updates laufen zu haben. In den Single-User-Mode zu gehen ist wahrscheinlich
|
||||
auch eine gute Idee!
|
||||
<P>
|
||||
Wenn Du lieber den harten Weg gehen willst, kannst Du die Bibliothek und
|
||||
die Header-Dateien von:
|
||||
<P>
|
||||
<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz</A>
|
||||
<P>
|
||||
holen. Alternativ findest Du vorkompilierte Binaries in
|
||||
distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb auf dem gleichen
|
||||
ftp-Server oder folge den Instruktionen bei <A HREF="#1.2">Frage 1.2</A>, die den gleichen Fehler
|
||||
für Slackware 3.1 behandelt.
|
||||
<P>
|
||||
Mache es aber nur auf diese Weise, wenn Du weißt, was Du tust!
|
||||
|
||||
|
||||
<H4><A NAME="1.4">1.4)</A> [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?</H4>
|
||||
Das Problem erscheint dadurch, daß in der letzten Phase des Kompilierungsvorgangs Funktionen wie
|
||||
dlopen(), dlclose(), etc. nicht gelinkt werden können.
|
||||
<P>
|
||||
Siehe die Antwort zu <A HREF="#1.3">Frage 1.3</A>.
|
||||
<P>
|
||||
Slackware bis Version 3.0 war mit dieser Bibliothek und der Include-Datei ausgestattet und ab späten
|
||||
3.1er-Versionen scheinen sie auch wieder da zu sein. Aber in frühen 3.1er-Versionen (vor dem 09.09.96)
|
||||
fehlten sie und es wurden viele CD-ROMs von diesen ersten 3.1.er-Versionen gepresst.
|
||||
<P>
|
||||
Es gab einen Bericht über ein zerstörtes System, weil Programme auf
|
||||
diese Bibliothek während des Updates zugegriffen haben (alles in allem nicht
|
||||
weiter überraschend). Konsequenterweise ist es eine gute Idee, das System vor der
|
||||
Installation zu rebooten, um so wenige Programme wie möglich während
|
||||
des Updates laufen zu haben. In den Single-User-Mode zu gehen ist wahrscheinlich
|
||||
auch eine gute Idee!
|
||||
<P>
|
||||
Der einfachste Weg, den Fehler zu beseitigen ist, die Datei ldso.tgz von der a4-Diskette einer
|
||||
aktuelleren Slackware zu nehmen, diese Datei im Wurzelverzeichnis (/) zu entpacken und dann ein
|
||||
<PRE>sh install/doinst.sh</PRE>
|
||||
durchzuführen. Danach ein <PRE>ldconfig</PRE>durchführen.
|
||||
<P>
|
||||
Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation
|
||||
der Bibliothek und vor dem erneuten Kompilieren laufen lassen.
|
||||
<P>
|
||||
Falls Du manuell installieren möchtest, installiere zuerst die Datei dlfcn.h in /usr/include.
|
||||
Dann die libdl.so.1.7.14 (oder was immer die letzte Version ist) in /lib. Dann führe
|
||||
folgende Befehle aus:
|
||||
<PRE>
|
||||
cd /lib
|
||||
ln -sf libdl.so.1.7.14 libdl.so.1
|
||||
ln -sf libdl.so.1 libdl.so
|
||||
</PRE>
|
||||
Auf manchen Systemen (je nach Deiner gcc-Konfiguration) können noch folgende
|
||||
Befehle notwendig sein:
|
||||
<PRE>
|
||||
cd /usr/lib
|
||||
ln -sf /lib/libdl.so .
|
||||
</PRE>
|
||||
Und zum Schluß noch ein <PRE>ldconfig</PRE>
|
||||
<P>
|
||||
Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation
|
||||
der Bibliothek und vor dem erneuten Kompilieren laufen lassen.
|
||||
|
||||
<H4><A NAME="1.5">1.5)</A> Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die Include-Datei dlfcn.h fehlen würde.</H4>
|
||||
Siehe die Antworten zu den Fragen <A HREF="#1.3">1.3</A> und <A HREF="#1.4">1.4</A>.
|
||||
Und vergiss nicht, falls Du ein a.out-System benutzt, daß Du das dld-Paket installiert haben muß
|
||||
(welches bei den meisten a.out-Systemen nicht dabei ist), um dlfcn.h zu haben. Siehe <A HREF="#1.11">Frage 1.11</A>.
|
||||
|
||||
<H4><A NAME="1.6">1.6)</A> GCC meldet, daß er die Option -fpic ignorieren würde.</H4>
|
||||
Frühere Versionen des gcc nahmen entweder <CODE>-fpic</CODE> oder <CODE>-fPIC</CODE> an.
|
||||
Es scheint, daß neuere Versionen (V2.7.2?) <CODE>-fPIC</CODE> erfordern.
|
||||
Falls Du ein ELF-System benutzt, kannst das alles ignoriert werden, da <CODE>-fPIC</CODE>
|
||||
als Standardvorgabe voreingestellt ist.
|
||||
|
||||
Du kannst diese Angabe korrigieren, indem Du CFLAGS_SL in der Datei src/Makefile.global
|
||||
änderst.
|
||||
|
||||
|
||||
<H4><A NAME="1.7">1.7)</A> Ich bekomme Warnungen, wie: <EM>warning: cast from pointer to integer of different size</EM></H4>
|
||||
Diese Warnungen wurden in früheren Versionen von Postgres95 gesichtet und können ignoriert werden.
|
||||
PostgreSQL V6.0 sollte ohne Warnungen kompiliert werden, außer jenen, die sich auf System-Header-Dateien beziehen
|
||||
(welche auch ignoriert werden können).
|
||||
|
||||
|
||||
<H4><A NAME="1.8">1.8)</A> [SuSE-Linux 4.2-5.3] Wo sind curses und termcap?</H4>
|
||||
SuSE-Linux 4.2 hat ncurses, nicht curses. Version 4.4 scheint beide Bibliotheken zu haben.
|
||||
Bei SuSE-Linux ist außerdem die termcap-Bibliothek in /usr/lib/termcap/ und nicht in /usr/lib.
|
||||
|
||||
<H5>PostgreSQL (bis Version V6.0)</H5>
|
||||
Setze den Wert für CURSES_LIB in src/Makefile.custom auf -lncurses (oder erledige das durch das <EM>customize script</EM>.
|
||||
Füge folgende Zeile zur Datei src/Makefile.custom hinzu:
|
||||
<PRE>
|
||||
LDADD_BE+= -L/usr/lib/termcap
|
||||
</PRE>
|
||||
Möglicherweise mußt Du in der Datei src/bin/psql/Makefile folgende Änderung durchführen:
|
||||
<PRE>
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+=
|
||||
</PRE>
|
||||
ändern in:
|
||||
<PRE>
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+= -ltermcap
|
||||
</PRE>
|
||||
|
||||
<H5>PostgreSQL (V6.1)</H5>
|
||||
Das Konfigurationsscript weiß nicht, daß es auch in /usr/lib/termcap nach der termcap-Bibliothek schauen soll.
|
||||
Du solltest dieses Verzeichnis angeben, wenn es nach zusätzlichen Such-Verzeichnissen fragt.
|
||||
<P>
|
||||
Falls das nicht funkitoniert (Ich habe SuSE nicht, um das zu testen), dann solltest Du nach dem <EM>./configure</EM>-Lauf
|
||||
die Datei src/Makefile.global ändern und in die LDFLAGS-Zeile den Eintrag -ltermcap (nach -lreadline) hinzufügen.
|
||||
(Alternativ kannst Du auch die Datei src/Makefile.custom ändern, bevor Du <EM>./configure</EM> aufrufst.)
|
||||
<P>
|
||||
Einige SuSE-Versionen liefern nur ncurses, deshalb kann es sein, daß Du die
|
||||
Benutzung von ncurses statt curses erzwingen mußt, indem Du -lcurses in -lncurses änderst.
|
||||
(bestätigt für SuSE 5.1)
|
||||
<P>
|
||||
<H5>PostgreSQL (V6.4)</H5>
|
||||
In PostgreSQL V6.4 überprüft <CODE>configure</CODE> sowohl das Vorhandensein von
|
||||
curses, als auch das von ncurses.
|
||||
In der Zwischenzeit kannst Du den patch von <A HREF="mailto:ke@suse.de">Karl Eichwalder (ke@suse.de)</A>
|
||||
anwenden:
|
||||
<P>
|
||||
<A HREF="http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html">http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html</A><BR>
|
||||
oder (mit deutschen Bemerkungen):<BR>
|
||||
<A HREF="http://www.suse.de/Support/sdb/ke_postgresql-632.html">http://www.suse.de/Support/sdb/ke_postgresql-632.html</A>
|
||||
<P>
|
||||
Es gab außerdem einen Bericht, daß beim Update von SuSE 5.0 auf SuSE 5.2 der Link
|
||||
von libtermcap.so.2.0.8 auf libtermcap.so nicht gesetzt wurde:
|
||||
<PRE>
|
||||
cd /usr/lib
|
||||
ln -s libtermcap.so.2.0.8 libtermcap.so
|
||||
</PRE>
|
||||
|
||||
<H4><A NAME="1.9">1.9)</A> Warum bekomme ich Probleme mit ld.so?</H4>
|
||||
|
||||
Falls Du Probleme mit ld.so bekommst - eine andere Bibliothek, die im ELF-System für dynamisches Laden
|
||||
benötigt wird - dann hast Du Deine Systeminstallation oder wahrscheinlicher ein Linux-Update durcheinandergebracht
|
||||
|
||||
Siehe die Fragen <A HREF="#1.3">1.3</A>/<A HREF="#1.4">1.4</A>. Möglicherweise mußt Du ld.so.x.y.z in /lib installieren
|
||||
und ldconfig laufen lassen. Die aktuellste Version des ld-Packages ist 1.7.14. Zum Zeitpunkt des Schreibens dieser FAQ ist die Version 1.8 noch experimental.
|
||||
|
||||
<H4><A NAME="1.10">1.10)</A> Wieso bekomme ich <EM>yy_flush_buffer undefined</EM> Fehler?</H4>
|
||||
Das ist nicht wirklich Linux-spezifisch, aber es tritt häufiger auf alten Linux-Systemen auf.
|
||||
Du brauchst eine aktuelle Version von flex (2.5.2. oder neuer), um PostgreSQL zu kompilieren. Beachte, daß flex 2.5.3.
|
||||
einen Bug hat, siehe auch <A HREF="3.4">Frage 3.4</A>.
|
||||
|
||||
<H4><A NAME="1.11">1.11)</A> Wie kompiliere ich PostgreSQL auf einem a.out System?</H4>
|
||||
Als erstes mußt Du die dld-Bibliothek installieren. Diese gibt es auf Sunsite unter
|
||||
Linux/libs/dld.3.2.7.tar.gz (<A HREF="ftp://sunsite.unc.edu/pub/Linux/libs/">ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz</A>).
|
||||
<P>
|
||||
Dann füge folgende Zeile in src/Makefile.custom hinzu:
|
||||
<PRE>
|
||||
LINUX_ELF=
|
||||
</PRE>
|
||||
oder benutze das <EM>customize Skript</EM>
|
||||
|
||||
<H4><A NAME="1.12">1.12)</A> Warum scheitert make mit der Meldung:<BR><EM>
|
||||
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
|
||||
make: /usr/bin/make: cannot execute binary file</EM></H4>
|
||||
|
||||
Das war ein Problem in frühreren Versionen von Postgres95. Standardmäßig benutzt PostgreSQL <CODE>bison -y</CODE>
|
||||
anstatt <CODE>yacc</CODE>.
|
||||
<P>
|
||||
yacc ist normalerweise als Skript implementiert, das <CODE>bison -y</CODE> aufruft. Aus verschiedenen Gründen ist
|
||||
<EM>make</EM> nicht in der Lage, das Skript auszuführen (verschiedene Versionen von make? Verschiedene Versionen der bash?)
|
||||
<P>
|
||||
Um das zu beheben, ändere einfach die Datei src/mk/port/postgres.mk.linux am Ende. Die Zeile:
|
||||
<PRE>
|
||||
# YACC = bison -y
|
||||
</PRE>
|
||||
wird zu:
|
||||
<PRE>
|
||||
YACC = bison -y
|
||||
</PRE>
|
||||
|
||||
|
||||
<H4><A NAME="1.13">1.13)</A> Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl in der Datei src/Makefile.global?</H4>
|
||||
Das war ein Problem in Version 1.08 (Sun Solaris spezifisch). Sie sind behoben in 1.09 und 6.0
|
||||
|
||||
<H4><A NAME="1.14">1.14)</A> [DEBIAN] Wo ist die Bibliothek libtermcap?</H4>
|
||||
Debian Linux kommt ohne die termcap-Bibliothek und benutzt ncurses (welche terminfo benutzt).
|
||||
Es gibt keinen Grund, die CURSES_LIB-Variable in src/bin/psql/Makefile zu ändern, da Debian
|
||||
einen Link von libncurses auf libcurses bereitstellt (im Gegensatz zu SuSE, siehe <A HREF="1.8">Frage 1.8</A>)
|
||||
<P>
|
||||
Du kannst die Datei src/bin/psql/Makefile wie folgt ändern:
|
||||
<PRE>
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+= -ltermcap
|
||||
</PRE>
|
||||
in
|
||||
<PRE>
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+=
|
||||
</PRE>
|
||||
|
||||
|
||||
<H4><A NAME="1.15">1.15)</A> [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen?</H4>
|
||||
Ja! <A HREF="mailto:mimo@lodz.pdi.net">Michal Mosiewicz</A> (<A HREF="http://www.pdi.lodz.pl/~mimo">http://www.pdi.lodz.pl/~mimo</A>)
|
||||
hat ein RPM für PostgreSQL V6.0 auf Intel Architekturen zusammengestellt,
|
||||
welches er nach <A HREF="ftp://ftp.redhat.org/pub/Incoming/">ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm</A>
|
||||
hochgeladen hat.
|
||||
<P>
|
||||
Das ist eine vorkompilierte Version, das Quelltext-RPM stammt vom 03.02.1997.
|
||||
|
||||
|
||||
|
||||
<H4><A NAME="1.16">1.16)</A> Während ich versuche eine Entwickler-Version unter Linux zu kompilieren, bricht der Vorgang mit folgender
|
||||
Fehlermeldung ab:<BR><EM>
|
||||
In file included from /usr/include/sys/sem.h:8,<BR>
|
||||
from ipc.c:37:<BR>
|
||||
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'<BR>
|
||||
....<BR>
|
||||
make: *** [ipc.o] Error 1</EM></H4>
|
||||
|
||||
Das Problem ist, daß Linux keine Prototypen für diese Inline-Funktionen bereithält. Die Lösung
|
||||
liegt darin, das Makefile in .../src/backend/storage/ipc/ zu ändern:
|
||||
Ändere die Zeile:
|
||||
<PRE>
|
||||
CFLAGS+=$(INCLUDE_OPT)
|
||||
</PRE>
|
||||
in
|
||||
<PRE>
|
||||
CFLAGS+=$(INCLUDE_OPT) -Wno-error
|
||||
</PRE>
|
||||
Mache dasselbe dann im ../src/backend/storage/lmgr Verzeichnis.
|
||||
|
||||
|
||||
<H4><A NAME="1.17">1.17)</A> Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 Meldung ab.</H4>
|
||||
Oder genauer: <EM>gcc: Internal compiler error: program cc1 got fatal signal 11</EM>
|
||||
<P>
|
||||
Das können Hardware/Speicherprobleme sein. PostgreSQL ist ein großes Programm und große
|
||||
gcc-Kompilierungsläfe (wie eben PostgreSQL oder eine Kernel-Kompilierung) beanspruchen den Hauptspeicher
|
||||
wie wenig andere Programme. Dadurch können Fehler auftreten, die in normalen Situationen nicht erscheinen.
|
||||
Niedrigere Betriebssysteme beanspruchen die Hardware ebenfalls nicht in diesem Maße, deshalb kann es sein, daß Du niemals
|
||||
Probleme unter DOS/Windows siehst.
|
||||
<P>
|
||||
Mehr Information zu diesem Problem gibt es unter <A HREF="http://www.BitWizard.nl/sig11/">http://www.BitWizard.nl/sig11/</A> und
|
||||
in deutsch unter <A HREF="http://www.suse.de/sdb/de/html/kfr_58.html">http://www.suse.de/sdb/de/html/kfr_58.html</A>.
|
||||
<P>Laut dieser Sig11-FAQ scheint es ein spezielles Problem mit dem RedHat 5.0 gcc auf einem Cyrix-Prozessor zu geben.
|
||||
Siehe bitte dort nach den Details nach.
|
||||
|
||||
<H4><A NAME="1.18">1.18)</A> Kann ich Version 6.1.1 unter MkLinux installieren?</H4>
|
||||
<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</A> hat das unter MkLinux DR2.1 update2 geschafft, nachdem der kleine Patch
|
||||
von <A HREF="ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/">ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz</A>
|
||||
eingespielt wurde.
|
||||
|
||||
|
||||
<H4><A NAME="1.19">1.19)</A> Warum stoppt make oder bricht sonstwie ab?</H4>
|
||||
Es gibt eine Reihe von Reports darüber, daß gmake zu früh aussteigt oder mit einem Segmentation Fault aussteigt.
|
||||
Das letzte Problem wurde von gmake 3.74 berichtet. Ein Update auf 3.76.1 löste dieses Problem.
|
||||
Wie auch immer, 3.74 arbeitet bei vielen Leuten zur vollsten Zufriedenheit. Kurz gesagt, upgrade
|
||||
Deinen gmake auf die aktuellste Version, bevor Du dieses Problem meldest.
|
||||
|
||||
<H4><A NAME="1.20">1.20)</A> Wie kann ich für die Prozessoren 486 oder Pentium optimieren?</H4>
|
||||
Die Standard-Compilerflags führen keine Optimierung für den 486er oder den Pentium-Prozessor durch.
|
||||
Um diese Optimierung zu aktivieren, füge wahlweise <U>eine</U> der folgenden Zeilen
|
||||
der Datei Makefile.custom hinzu:
|
||||
<PRE>
|
||||
CFLAGS+= -m486
|
||||
</PRE>
|
||||
oder
|
||||
<PRE>
|
||||
CFLAGS+= -mpentium
|
||||
</PRE>
|
||||
oder
|
||||
<PRE>
|
||||
CFLAGS+= -mpentiumpro
|
||||
</PRE>
|
||||
|
||||
<H4><A NAME="1.21">1.21)</A> Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. beim Regressionstest 'timespan')?</H4>
|
||||
Die Zeit erscheint z.B. als: "4 hours 59 mins 60.00 secs" und nicht als "5 hours"
|
||||
<P>
|
||||
Das ist ein Problem mit der glibc2-Bibliothek, die mit RedHat 5.0 ausgeliefert wird. Update Deine glibc auf die aktuellste RedHat-Version
|
||||
für v5.0/Hurricane. Alle Versionen vor glibc-2.9.7 scheinen dieses Problem zu haben.
|
||||
|
||||
<H4><A NAME="1.22">1.22)</A> Warum bekomme ich keine shared libraries für libpq, wenn ich Version 6.3.2 kompiliere?</H4>
|
||||
Es gab eine Last-Minute-Änderung der Linux-Konfiguration für Version 6.3.2.
|
||||
Siehe für einige Fehlerbehebungen und einen Linux-ELF-Patch in <A HREF="ftp://postgresql.org/pub/patches/">ftp://postgresql.org/pub/patches/</A> nach.
|
||||
|
||||
<H4><A NAME="1.23">1.23)</A> Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien?</H4>
|
||||
Die komplette Meldung sieht ungefähr so aus:
|
||||
<PRE>
|
||||
-I/usr/include/readline -O2 -Wall -Wmissing-prototypes -I..
|
||||
-Wno-error -c bootstrap.c -o bootstrap.o
|
||||
bootstrap.c:160: `F_BOOLIN' undeclared here (not in a function)
|
||||
bootstrap.c:160: initializer element for `Procid[0].inproc' is not
|
||||
constant
|
||||
bootstrap.c:160: `F_BOOLOUT' undeclared here (not in a function)
|
||||
bootstrap.c:160: initializer element for `Procid[0].outproc' is not
|
||||
constant
|
||||
bootstrap.c:161: `F_BYTEAIN' undeclared here (not in a function)
|
||||
bootstrap.c:161: initializer element for `Procid[1].inproc' is not
|
||||
constant
|
||||
</PRE>
|
||||
Solange Du nicht weißt, warum das passiert, ist dieses Problem ziemlich kniffelig, da diese
|
||||
Konstanten anscheinend nirgendwo definiert werden.
|
||||
<P>
|
||||
Die Lösung ist dafür zu sorgen, daß der cpp in Deinem Pfad erreichbar ist, bevor
|
||||
make gestartet wird.
|
||||
<P>
|
||||
Auf Redhat 5.1, ist cpp in /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3
|
||||
|
||||
|
||||
|
||||
|
||||
<H3><A NAME="Sec2">Abschnitt 2: Hilfs- und Zusatzprogramme kompilieren</A></H3>
|
||||
|
||||
<H4><A NAME="2.1">2.1)</A> Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert werden soll.</H4>
|
||||
Füge folgende Zeile in src/Makefile.custom hinzu:
|
||||
<PRE>
|
||||
X11_LIBDIR = /usr/X11R6/lib
|
||||
</PRE>
|
||||
|
||||
<H3><A NAME="Sec3">Abschnitt 3: Laufzeit Probleme</A></H3>
|
||||
|
||||
<H4><A NAME="3.1">3.1)</A> Ich bekomme die Fehlermeldung <EM>_fUnKy_POSTPORT_sTuFf_ undefined</EM>, wenn Skripts wie createuser laufen.</H4>
|
||||
Das ist ein Fehler in Versionen 1.06-1.07 und ist ab Version 1.08 und höher behoben.
|
||||
|
||||
<H4><A NAME="3.2">3.2)</A> Nachdem ich postmaster starte, meldet das System <EM>Bad system call (Core dumped)</EM></H4>
|
||||
Diese Fehlermeldung deutet an, daß Du keinen Shared-Memory-Support in den Kernel einkompiliert hast.
|
||||
Der Kernel muß mit dieser Option neu kompiliert werden, um diese Eigenschaft hinzuzufügen.
|
||||
|
||||
<H4><A NAME="3.3">3.3)</A> Wenn ich versuche, den Postmaster zu starten, bekomme ich eine Fehlermeldung wie:<BR><EM>
|
||||
Failed Assertion("!(file != 0):(null)", File:<BR>
|
||||
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)<BR>
|
||||
!(file != 0) (0)<BR>
|
||||
initdb: could not create template database<BR>
|
||||
initdb: cleaning up.</EM></H4>
|
||||
|
||||
Deine Berechtigungen für die Datei /dev/null sind falsch gesetzt.
|
||||
ein <CODE>ls -l /dev/null</CODE> sollte folgende Ausgabe zeigen:
|
||||
<PRE>
|
||||
crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null
|
||||
</PRE>
|
||||
Korrigiere die Berechtigungen mit:
|
||||
<PRE>
|
||||
chmod a+rw /dev/null
|
||||
</PRE>
|
||||
|
||||
<H4><A NAME="3.4">3.4)</A> Warum funktioniert createuser nicht?</H4>
|
||||
Es gibt ein Problem mit Version 2.5.3 des GNU flex und createuser. Die Möglichkeiten, diesen Fehler zu beheben sind:
|
||||
Entweder auf die flex-Version 2.5.3 zu gehen, auf Version 2.5.4 zu gehen, oder
|
||||
den Patch nach doc/README.flex einzuspielen.
|
||||
<P>
|
||||
Die Version 2.5.4. gibt es unter <A HREF="ftp://prep.ai.mit.edu/pub/gnu/">ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz</A>.
|
||||
|
||||
|
||||
<H4><A NAME="3.5">3.5)</A> Wieso bekomme ich einen Fehler, wie:<BR><EM>
|
||||
IpcMemoryCreate: memKey=155356396 , size=760632 ,<BR>
|
||||
permission=384IpcMemoryCreate: shmget(..., create, ...)<BR>
|
||||
failed: Invalid argument</EM></H4>
|
||||
|
||||
Du hast keine IPC-Unterstützung in Deinen Linux-Kernel einkompiliert.
|
||||
Der Kernel muß mit dieser Option neu kompiliert werden, um diese Eigenschaft hinzuzufügen.
|
||||
|
||||
<H4><A NAME="3.6">3.6)</A> Wieso scheitert der Aufruf von psql mit: <EM>psql: can't load library 'libpq.so.1</EM></H4>
|
||||
Psql wurde mit dynamischen Zugriff auf die libpq-bibliothek kompiliert.
|
||||
Um dieses Problem zu lösen, solltest Du Dich als root anmelden und die Datei /etc/ld.so.conf editieren.
|
||||
Füge eine Zeile am Ende hinzu, die den Namen des PostgreSQL-Bibliotheken-Verzeichnis enthält (das
|
||||
lib-Verzeichnis im PostgreSQL-Installationsverzeichnis) und rufe den Befehl <CODE>/sbin/ldconfig -v</CODE> auf.
|
||||
|
||||
Alternativ (und falls Du keinen root-Zugriff hast) kannst Du die LD_LIBRARY_PATH-Variable
|
||||
benutzen.
|
||||
Die LD_LIBRARY_PATH-Variable enthält eine durch Doppelpunkt getrennte Liste mit Suchpfaden für
|
||||
Shared-Bibliotheken. Diese Liste wird durchsucht, bevor auf die Informationen von ldconfig zugegriffen wird.
|
||||
Unter der bash sieht das ganze so aus:
|
||||
<PRE>
|
||||
export LD_LIBRARY_PATH='PathToPGSQL'/lib
|
||||
</PRE>
|
||||
unter der tcsh so:
|
||||
<PRE>
|
||||
setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
|
||||
</PRE>
|
||||
wobei 'PathToPGSQL' das Installationsverzeichnis von PostgreSQL ist.
|
||||
Hinweis: der ldd-Befehl dient dazu, sich die dynamischen Bibliotheken für eine bestimmte
|
||||
ausführbare Datei anzeigen zu lassen.
|
||||
|
||||
|
||||
<H4><A NAME="3.7">3.7)</A> Andere seltsame Verhaltensweisen</H4>
|
||||
Ich bin mir nicht sicher, welche Symptome alle auftreten können, außer daß gar nichts richtig funktioniert,
|
||||
aber es stellte sich heraus, daß man sorgsam darauf achten sollte, daß die richtige Version der libpq-Bibliothek
|
||||
geladen wird. Falls Du alte Versionen in Deinem Bibliothekspfad hast (z.B. in /usr/lib) können diese statt der
|
||||
neueren Version geladen werden. Schaffe diese alten Versionen beiseite und siehe im übrigen
|
||||
<A HREF="3.6">Frage 3.6</A> für weitere Details bezüglich dem Laden von Bibliotheken.
|
||||
|
||||
<H4><A NAME="3.8">3.8)</A> Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart jedesmal einen Filesystemcheck (fsck) durch</H4>
|
||||
Es gab darüber einige Berichte und es scheint, daß dies passiert, wenn PostgreSQL von der /etc/inittab
|
||||
gestartet wird, wie im INSTALL-Dokument beschrieben.
|
||||
<P>
|
||||
Deshalb wird Dir empfohlen, den postmaster von einem rc-Skript aus zu starten.
|
||||
Unter einem Slackware-artigem System würdest Du /etc/rc.d/rc.local modifizieren,
|
||||
um den postmaster zu starten.
|
||||
<P>
|
||||
Unter RedHat-artigen Systemen würdest Du ein SysV-artiges Skript in /etc/rc.d/rc3.d
|
||||
basierend auf der /etc/rc.d/init.d Schablonen-Datei erstellen.
|
||||
<P>
|
||||
Es gibt eine Beispieldatei unter dem Verzeichnis contrib/linux/postgres.init.
|
||||
<P>
|
||||
Hier ist noch ein anderes Beispiel von <A HREF="mailto:john@intelligent.co.uk">John Robinson</A>
|
||||
welches Du entsprechend anpassen kannst.
|
||||
|
||||
<PRE>
|
||||
#!/bin/sh
|
||||
#
|
||||
# postgreSQL.init This shell script takes care of starting and stopping
|
||||
# the PostgreSQL postmaster.
|
||||
#
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
# Source networking configuration.
|
||||
. /etc/sysconfig/network
|
||||
|
||||
# Check that networking is up.
|
||||
[ ${NETWORKING} = "no" ] && exit 0
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start)
|
||||
# Start daemons.
|
||||
echo -n "Starting postgres Postmaster daemon:"
|
||||
if [ -z "`pidofproc postmaster`" ]
|
||||
then
|
||||
su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &"
|
||||
echo -n " postmaster"
|
||||
else
|
||||
echo -n " (already running)"
|
||||
fi
|
||||
echo
|
||||
touch /var/lock/subsys/postgres
|
||||
;;
|
||||
stop)
|
||||
# Stop daemons.
|
||||
echo -n "Shutting down postgres Postmaster daemon: "
|
||||
killall -TERM postmaster 2>/dev/null
|
||||
killall -TERM postgres 2>/dev/null
|
||||
echo
|
||||
rm -f /var/lock/subsys/postgres
|
||||
;;
|
||||
*)
|
||||
echo "Usage: postgres {start|stop}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit 0
|
||||
</PRE>
|
||||
|
||||
|
||||
<H4><A NAME="3.9">3.9)</A> Warum dauert Query 32 in den RegressionsTests so lange?</H4>
|
||||
Das passiert wegen eines Fehlers in den Regressions-Skripten auf Linux-Kisten.
|
||||
Es gibt - soweit ich weiß - zwei Möglichkeiten, diese Fehler zu umgehen
|
||||
(die Information stammt von <A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</A>):
|
||||
<P>
|
||||
1. ändere folgende Zeile in regress.sh:
|
||||
<PRE>
|
||||
time postgres -texecutor -tplanner -Q bench < bench.sql
|
||||
</PRE>
|
||||
in
|
||||
<PRE>
|
||||
postgres -texecutor -tplanner -Q bench < bench.sql
|
||||
</PRE>
|
||||
2. nachdem der Test gelaufen ist, entferne eine Zeile ganz am Ende der Datei bench.out,
|
||||
die ungefähr so aussieht:
|
||||
<PRE>
|
||||
85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k
|
||||
</PRE>
|
||||
dann gib folgendes auf der Befehlszeile ein:
|
||||
<PRE>
|
||||
sh ./perquery < bench.out > & bench.out.perquery
|
||||
</PRE>
|
||||
|
||||
|
||||
|
||||
<H4><A NAME="#3.10">3.10)</A> Warum bekomme ich lustige Rundungsergebnisse in einigen Datums/Zeit-Berechnungen, wie:<BR><EM>
|
||||
select '4 hours'::timespan;<BR>
|
||||
liefert '3 hours 59 minutes 60 seconds'</EM>?</H4>
|
||||
|
||||
Du benutzt neue glibc2-Bibliotheken in einer Version kleiner als 2.0.7. Das ist ein mathematisches Rundungsproblem.
|
||||
Aktualisiere Deine Bibliothek.
|
||||
|
||||
|
||||
<H4><A NAME="3.11">3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?</H4>
|
||||
Im Detail erscheint der Fehler mit dieser Meldung:<BR>
|
||||
<PRE>
|
||||
In detail, a message like this may appear:
|
||||
IpcMemoryCreate: shmget failed (Permission denied)
|
||||
key=5432010, size=120, permission=700
|
||||
IpcMemoryAttach: shmat failed (Permission denied) id=0
|
||||
FATAL 1: AttachSLockMemory: could not attach segment
|
||||
</PRE>
|
||||
Dieser Fehler wird durch nicht gelöschte Segmente im <EM>shared memory</EM> verursacht.
|
||||
(Du kannst sie mit dem Programm <EM>ipcs</EM> sehen.
|
||||
Benutze das Programm <EM>ipcrm</EM>, um sie zu löschen.
|
||||
<HR>
|
||||
<P><BR>
|
||||
<P><BR>
|
||||
<CENTER>
|
||||
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2>
|
||||
<TR>
|
||||
<TH COLSPAN=2>Author of the english version</TH>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=LEFT>Dr. Andrew C.R. Martin</TD>
|
||||
<TD ALIGN=RIGHT>University College London</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=LEFT>EMAIL: (Work) martin@biochem.ucl.ac.uk</TD>
|
||||
<TD ALIGN=RIGHT>(Home) andrew@stagleys.demon.co.uk</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=CENTER COLSPAN=2>URL: http://www.biochem.ucl.ac.uk/~martin</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=LEFT>Tel: (Work) +44(0)171 419 3890</TD>
|
||||
<TD ALIGN=RIGHT>(Home) +44(0)1372 275775</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<P>
|
||||
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2>
|
||||
<TR>
|
||||
<TH COLSPAN=2>Translator of the german version</TH>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=LEFT>Karsten Schulz</TD>
|
||||
<TD ALIGN=RIGHT>Linux Systemhaus Schulz</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=LEFT>EMAIL: (Work) schulz@Linux-Systemhaus.de</TD>
|
||||
<TD ALIGN=RIGHT>(Home) kaschu@t800.ping.de</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=CENTER COLSPAN=2>URL: http://www.Linux-Systemhaus.de/</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ALIGN=LEFT>Tel: (Work) +49 231 3944432</TD>
|
||||
<TD ALIGN=RIGHT>(Fax) +49 231 3944435</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
</BODY>
|
||||
</HTML>
|
666
doc/src/FAQ/FAQ_linux_italian.html
Normal file
666
doc/src/FAQ/FAQ_linux_italian.html
Normal file
@ -0,0 +1,666 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.06 [en] (X11; I; Linux 2.1.105 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFDEC">
|
||||
|
||||
<PRE>=======================================================
|
||||
Frequently Asked Questions (FAQ) per PostgreSQL >= V6.1
|
||||
Specifiche per Linux Os
|
||||
DA LEGGERE IN CONGIUNZIONE CON LE NORMALI FAQ
|
||||
=======================================================
|
||||
Ultimo aggiornamento: Lunedi' 18 Maggio 11:17:00 GMT 1998
|
||||
|
||||
Curatore corrente: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
|
||||
Autore originale: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
|
||||
Traduzione FAQ in italiano: Daniele Medri 'MaDriD' (madrid@darshan.org)
|
||||
|
||||
Cambiamenti in questa versione (* = modificato, + = nuovo, - = rimosso):
|
||||
|
||||
+1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio
|
||||
nel test di regressione 'timespan'?</PRE>
|
||||
|
||||
<PRE>Questo file è diviso approsimativamente nel sequente modo:
|
||||
1.*) Istallare PostgreSQL
|
||||
2.*) Compilare programmi accessori
|
||||
3.*) Problemi di esecuzione
|
||||
|
||||
|
||||
Domande risposte:
|
||||
1.1) Quali cambiamenti devo fare a src/Makefile.global o a src/Makefile.custom
|
||||
e ci sono altri cambiamenti necessari?
|
||||
1.2) Perche' ricevo problemi con missing libreadline?
|
||||
1.3) [REDHAT] Perche' ricevo problemi di libdl e dlfcn.h perse?
|
||||
1.4) [SLACKWARE 3.1] Perche' ricevo problemi di libdl e dlfcn.h perse?
|
||||
1.5) La mia compilazione si arresta segnalando la mancanza dell'include file
|
||||
dlfcn.h perso.
|
||||
1.6) GCC reclama una ignorata opzione -fpic
|
||||
1.7) Ricevo messaggi di warning (errore) del tipo
|
||||
warning: cast from pointer to integer of different size
|
||||
1.8) [SuSE-Linux 4.2-4.4] Dove sono curses e termcap?
|
||||
1.9) Perche' ho problemi con ld.so?
|
||||
1.10) Perche' ricevo errori del tipo `yy_flush_buffer undefined'?
|
||||
1.11) Come posso compilare PostgreSQL su un sistema a.out?
|
||||
1.12) Che cosa fallisce con:
|
||||
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
|
||||
make: /usr/bin/make: cannot execute binary file
|
||||
1.13) Quali sono i riferimenti in X11_LIB a libsocket e libnsl in
|
||||
src/Makefile.global?
|
||||
1.14) [DEBIAN] Dov'e' libtermcap?
|
||||
1.15) [REDHAT] Posso trovare PostgreSQL come RPM?
|
||||
1.16) Quando tento di compilare una versione in sviluppo sotto Linux, la
|
||||
compilazione fallisce con il seguente messaggio:
|
||||
In file included from /usr/include/sys/sem.h:8,
|
||||
from ipc.c:37:
|
||||
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
|
||||
....
|
||||
make: *** [ipc.o] Error 1
|
||||
1.17) Quando sto' compilando postgres, gcc riporta un signal 11 e si interrompe.
|
||||
1.18) Posso installare 6.1.1 su MkLinux?
|
||||
1.19) Perche' esce o va in crash?
|
||||
1.20) Come posso ottimizzarlo per un 486 o un processore pentium
|
||||
1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio
|
||||
nel test di regressione 'timespan'?
|
||||
2.1) Il linker non trova libX11 quando sta' compilando pgtclsh
|
||||
3.1) Ricevo un messaggio tipo _fUnKy_POSTPORT_sTuFf_ non definito quando
|
||||
lancio uno script come createuser
|
||||
3.2) Lancio postmaster e dopo il sistema dice 'Bad system call(Core
|
||||
dumped)'
|
||||
3.3) Quando tento di lanciare Postmaster, perche' ricevo un errore del tipo
|
||||
Failed Assertion("!(file != 0):(null)", File:
|
||||
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
|
||||
!(file != 0) (0)
|
||||
initdb: could not create template database
|
||||
initdb: cleaning up.
|
||||
3.4) Perche' createuser non funziona?
|
||||
3.5) Perche' ricevo un errore del tipo:
|
||||
IpcMemoryCreate: memKey=155356396 , size=760632 ,
|
||||
permission=384IpcMemoryCreate: shmget(..., create, ...)
|
||||
failed: Invalid argument
|
||||
3.6) Perche' psql fallisce con:
|
||||
psql: can't load library 'libpq.so.1'
|
||||
3.7) Altri comportamenti strani
|
||||
3.8) Quando PostgreSQL e' attivo allo shutdown di sistema, Linux
|
||||
esegue al reboot un fsck al disco.
|
||||
3.9) Perche' la Query 32 nel test di regressione pretende molto tempo?
|
||||
3.10) Perche' ricevo dei risultati arrotondati su date/time aritmetici,
|
||||
come
|
||||
select '4 hours'::timespan;
|
||||
returning '3 hours 59 minutes 60 seconds'?
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Sezione 1: Compilare PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
|
||||
1.1) Quali cambiamenti devo fare a src/Makefile.global o a
|
||||
src/Makefile.custom e ci sono altri cambiamenti necessari?
|
||||
|
||||
I cambiamenti ai makefiles sono piu'facilmente fatti usando
|
||||
lo script di shell per la personalizzazione che si trova nella
|
||||
directory src che scrive un file Makefile.custom appropriato.
|
||||
|
||||
I soli altri cambiamenti che tu devi fare e rimpiazzare Flex se tu
|
||||
hai una versione 2.5.3, la quale ha dei bug che si manifestano al
|
||||
fallimento di createuser (Vedi domanda 3.4)
|
||||
|
||||
Se tu modifichi i makefiles a mano, tu *devi* settare le seguenti
|
||||
variabili:
|
||||
PORTNAME= linux
|
||||
|
||||
Tu devi anche cambiare quello che segue per settare la tua propria
|
||||
installazione:
|
||||
POSTGRESDIR
|
||||
|
||||
Se tu cambi sull'opzione USE_TCL, devi settare questo:
|
||||
TCL_INCDIR=
|
||||
TCL_LIBDIR=
|
||||
TCL_LIB=
|
||||
TK_INCDIR=
|
||||
TK_LIBDIR=
|
||||
TK_LIB=
|
||||
X11_INCDIR=
|
||||
X11_LIBDIR=
|
||||
X11_LIB=
|
||||
|
||||
Sul mio sistema Slackware3.0 esse sono:
|
||||
TCL_INCDIR= /usr/include/tcl
|
||||
TCL_LIBDIR= /usr/lib
|
||||
TCL_LIB= -ltcl
|
||||
TK_INCDIR= /usr/include/tcl
|
||||
TK_LIBDIR= /usr/lib
|
||||
TK_LIB= -ltk
|
||||
X11_INCDIR= /usr/include/X11
|
||||
X11_LIBDIR= /usr/X386/lib
|
||||
X11_LIB= -lX11
|
||||
|
||||
Devi fare ogni altro cambiamento necessario come documentato nel
|
||||
file INSTALL e in Makefile.global
|
||||
|
||||
|
||||
1.2) Perche' ricevo problemi con missing libreadline?
|
||||
|
||||
I sistemi Linux in genere non vengono distribuiti con la libreria
|
||||
Gnu readline installata. Si può in ogni caso o disattivare l'opzione
|
||||
di readline in src/Makefile.global o src/Makefile.custom, oppure
|
||||
installare la libreria GNU stessa (readline).
|
||||
|
||||
Nota che Linux Debian (come FreeBSD) esce con le readline installate.
|
||||
|
||||
1.3) [REDHAT] Perche' ricevo problemi di libdl e dlfcn.h perse??
|
||||
|
||||
Questa manifestazione avvisa che non c'e' la capacita' di linkare
|
||||
funzioni come dlopen(), dlclose(), etc. durante l'ultima fase di compilazione.
|
||||
|
||||
La libreria libdl e' usata per linkare in maniera dinamica le funzioni
|
||||
e rendere flessibile l'avvio dell'applicativo. Per alcune ragioni questa
|
||||
non era presente nella distribuzione Red Hat. La versione Redhat 4.0
|
||||
(Colgate) a colmato a questa mancanza.
|
||||
|
||||
RedHat ha ora una nuova versione di ld.so in formato RPM nei propri siti FTP.
|
||||
Scaricate:
|
||||
|
||||
ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm
|
||||
|
||||
Installa il file RPM nella maniera usuale e andra'!
|
||||
|
||||
ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un
|
||||
make clean dopo aver installato la libreria e prima di ricompilare.
|
||||
|
||||
C'e' stata una sola notizia di sistema corrotto da programmi che
|
||||
accedevano a queste librerie mentre venivano aggiornate (nessun altra
|
||||
sorpresa.) Conseguentemente e' una buona idea quella di fare un reboot
|
||||
del sistema prima di installare le nuove librerie e avere pochi
|
||||
processi attivi durante questo upgrade. Lanciare il sistema in
|
||||
modalita' utente singolo (single-user) e' probabilmente una buona idea!
|
||||
|
||||
Se tu vuoi fare la strada piu' dura, puoi ottenere la libreria e
|
||||
l'header file da:
|
||||
|
||||
ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz
|
||||
|
||||
Alternativamente puoi trovare i file binari precompilati in
|
||||
distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb
|
||||
nel medesimo sito, o seguire le istruzioni date alla domanda 1.2 per
|
||||
correggere lo stesso errore con le aggiornate versioni di Slackware 3.1.
|
||||
Non scegliere questo metodo se non sai quello che stai facendo!
|
||||
|
||||
|
||||
|
||||
1.4) [SLACKWARE 3.1] Perche' ricevo problemi di libdl e dlfcn.h perse??
|
||||
|
||||
Questa manifestazione avvisa che non c'e' la capacita' di linkare
|
||||
funzioni come dlopen(), dlclose(), etc. durante l'ultima fase di compilazione.</PRE>
|
||||
|
||||
<PRE> Guarda la risposta alla domanda 1.3. Slackware fino alla versione 3.0
|
||||
era provvista di questa libreria e degli include file e ritornarono nell'ultima
|
||||
versione 3.1, ma la prima versione della 3.1 (prima del 9 settembre 1996)
|
||||
non aveva queste e molte versioni su CD-ROM erano state stampate
|
||||
con la prima edizione.
|
||||
|
||||
C'e' stata una sola notizia di sistema corrotto da programmi che
|
||||
accedevano a queste librerie mentre venivano aggiornate (nessun altra
|
||||
sorpresa.) Conseguentemente e' una buona idea quella di fare un reboot
|
||||
del sistema prima di installare le nuove librerie e avere pochi
|
||||
processi attivi durante questo upgrade. Lanciare il sistema in
|
||||
modalita' utente singolo (single-user) e' probabilmente una buona idea!
|
||||
|
||||
Per fissare facilmente questo basta ottenere il file ldso.tgz dal quarto
|
||||
dischetto della piu' recente distribuzione Slackware e scompattarlo da
|
||||
dalla directory di root (/) e poi lanciare
|
||||
|
||||
sh install/doinst.sh
|
||||
|
||||
per completare l'installazione. Successivamente lanciare
|
||||
|
||||
ldconfig
|
||||
|
||||
ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un
|
||||
make clean dopo aver installato la libreria e prima di ricompilare.
|
||||
|
||||
Se vuoi installarla manualmente bisogna installare prima il file
|
||||
dlfcn.h in /usr/include.
|
||||
|
||||
Secondo, installa il file libdl.so.1.7.14 (o qualsiasi altra versione)
|
||||
in /lib, e poi fai:
|
||||
|
||||
cd /lib
|
||||
ln -sf libdl.so.1.7.14 libdl.so.1
|
||||
ln -sf libdl.so.1 libdl.so
|
||||
|
||||
Su certi sistemi (a seconda della personale configurazione di GCC)
|
||||
e' necessario fare:
|
||||
|
||||
cd /usr/lib
|
||||
ln -sf /lib/libdl.so .
|
||||
|
||||
Finalmente
|
||||
|
||||
ldconfig
|
||||
|
||||
ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un
|
||||
make clean dopo aver installato la libreria e prima di ricompilare.
|
||||
|
||||
|
||||
1.5) La mia compilazione si arresta segnalando la mancanza dell'include file
|
||||
dlfcn.h perso.
|
||||
|
||||
Guarda la risposta 1.3/1.4. Non dimenticare che se stai usando un sistema
|
||||
a.out devi prima avere installato il pacchetto dld (il quale non viene
|
||||
fornito con molti sistemi a.out) per avere dlfcn.h e gli altri.
|
||||
Guarda la domanda 1.11.
|
||||
|
||||
|
||||
1.6) GCC reclama una ignorata opzione -fpic
|
||||
|
||||
Le prime versioni di GCC accettavano entrambe -fpic o -£PIC.
|
||||
Nelle piu' recenti versioni (V2.7.2?) richiede -£PIC.
|
||||
Se tu stai usando una versione ELF di Linux, questa puo' per sicurezza
|
||||
essere ignorata perche' -£PIC e' di default.
|
||||
|
||||
Puoi correggere questa editando il file src/Makefile.global e cambiare
|
||||
CFLAGS_SL
|
||||
|
||||
|
||||
1.7) Ricevo messaggi di warning (errore) del tipo
|
||||
warning: cast from pointer to integer of different size
|
||||
|
||||
Questi appararivano nelle prime versione di Postgres95 e posso per sicurezza
|
||||
essere ignorate. PostgreSQL V6.0 dovrebbe compilare senza warnings
|
||||
ad eccezione di quelli relativi agli header file di sistema (i quali possono
|
||||
essere ignorati per sicurezza).
|
||||
|
||||
1.8) [SuSE-Linux 4.2-4.4] Dove sono curses e termcap?
|
||||
|
||||
SuSE-Linux 4.2 ha le ncurses ma non le curses. 4.4 ha entrambe.
|
||||
SuSE-Linux ha anche le librerie termcap in /usr/lib/termcap
|
||||
invece di essere in /usr/lib.
|
||||
|
||||
PostgreSQL (fino alla V6.0)
|
||||
-----------------------
|
||||
Setta il valore delle CURSES_LIB in src/Makefile.custom a -lncurses
|
||||
(o fai questo attraverso lo script di personalizzazione).
|
||||
Aggiundi la seguente riga al file src/Makefile.custom:
|
||||
|
||||
LDADD_BE+= -L/usr/lib/termcap
|
||||
|
||||
Devi editare il file src/bin/psql/Makefile e cambiare:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+=
|
||||
con:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+= -ltermcap
|
||||
|
||||
PostgreSQL (V6.1)
|
||||
-----------------
|
||||
Lo script di configurazone non sa' di cercare nella directory
|
||||
/usr/lib/termcap per le librerie termcap, percio' tu devi specificare
|
||||
questo come una delle directory delle librerie dove cercare.
|
||||
|
||||
Se non funziona (non ho SuSE per verificare che vada)
|
||||
allora lancia configure, edita src/Makefile.global e aggiungi
|
||||
-ltermcap alla linea LDFLAGS
|
||||
(dopo -lreadline). (Alternativamente poi configurare
|
||||
src/Makefile.custom prima di lanciare configure.)
|
||||
|
||||
Alcune versioni di SuSE forniscono solo ncurses, percio' tu devi
|
||||
forzare l'uso delle ncurses piuttosto che le curses cambiando
|
||||
-lcurses con -lncurses. (dimostrato per SuSE 5.1)
|
||||
|
||||
|
||||
1.9) Perche' ho problemi con ld.so?
|
||||
|
||||
Se tu hai problemi con ld.so, un altra libreria richiesta sotto ELF
|
||||
per il caricamento dinamico, allora hai creato disordine con la tua
|
||||
installazione o fatto un upgrade di Linux.
|
||||
|
||||
Guarda le risposte alle domande 1.3/1.4. Devi installare ld.so.x.y.z in
|
||||
/lib e lanciare ldconfig.
|
||||
|
||||
La piu' recente vesione stabile del pacchetto ld eì 1.7.14
|
||||
Mentre scrivo, la versione 1.8.x di ld e' sperimentale.
|
||||
|
||||
1.10) Perche' ricevo errori del tipo `yy_flush_buffer undefined'?
|
||||
|
||||
Questo non e' specifico per Linux, ma e' comune nelle vecchie istallazione
|
||||
di Linux. Devi avere una versione recente di Flex (2.5.2 o superiore)
|
||||
per compilare PostgreSQL. Nota che Flex 2.5.3 ha dei bug: guarda la
|
||||
domanda 3.4.
|
||||
|
||||
1.11) Come posso compilare PostgreSQL su un sistema a.out?
|
||||
|
||||
Prima, devi installare la libreria dld. Puoi ottenere questa da Sunsite come:
|
||||
Linux/libs/dld.3.2.7.tar.gz
|
||||
(ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz)
|
||||
|
||||
Secondo, aggiungi la seguente linea al file src/Makefile.custom:
|
||||
LINUX_ELF=
|
||||
(o usa lo script di configurazione)
|
||||
|
||||
1.12) Che cosa fallisce con:
|
||||
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
|
||||
make: /usr/bin/make: cannot execute binary file
|
||||
|
||||
Questo e' un problema delle prime versioni di Postgres95. Il default
|
||||
per PostgreSQL e' di usare bison -y piuttosto che yacc.
|
||||
|
||||
yacc e' generalmente implementato come script che invoca bison -y
|
||||
Per alcune ragioni (certe versioni di make? certe versioni di bash?)
|
||||
make non puo' eseguire questo file di script.
|
||||
|
||||
Per correggere questo, edita semplicemente src/mk/port/postgres.mk.linux
|
||||
e alla fine del file cambia:
|
||||
# YACC = bison -y
|
||||
con
|
||||
YACC = bison -y
|
||||
|
||||
1.13) Quali sono i riferimenti in X11_LIB a libsocket e libnsl in
|
||||
src/Makefile.global?
|
||||
|
||||
Questo era un problema nella versione 1.08 (specifica per Sun Solaris)
|
||||
E' stata fissata nella 1.09 e 6.0
|
||||
|
||||
1.14) [DEBIAN] Dov'e' libtermcap?
|
||||
|
||||
Debian Linux viene distribuita senza librerie termcap e usa ncurses
|
||||
(le quali usano terminfo all'interno). Non c'e' bisogno di cambiare la
|
||||
variabile CURSES_LIB in src/bin/psql/Makefile peche' Debian provvede
|
||||
con un link da libncurses a libcurses (diversamente da SuSE-Linux --
|
||||
Vedi domanda 1.8).
|
||||
|
||||
Devi editare src/bin/psql/Makefile e commentare i cambiamenti:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+= -ltermcap
|
||||
con:
|
||||
ifeq ($(PORTNAME), linux)
|
||||
LD_ADD+=
|
||||
|
||||
|
||||
1.15) [REDHAT] Posso trovare PostgreSQL come RPM?
|
||||
|
||||
Si! Michal Mosiewicz <mimo@lodz.pdi.net>
|
||||
(http://www.pdi.lodz.pl/~mimo) ha creato un RPM
|
||||
per PostgreSQL V6.0 per architettura Intel uplodata a
|
||||
ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm
|
||||
|
||||
Questa e' una precompilata versione, le sorgenti RPM erano come
|
||||
io ho scritto (3 Febbraio 1997).
|
||||
|
||||
1.16) Quando tento di compilare una versione in sviluppo sotto Linux, la
|
||||
compilazione fallisce con il seguente messaggio:
|
||||
In file included from /usr/include/sys/sem.h:8,
|
||||
from ipc.c:37:
|
||||
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
|
||||
....
|
||||
make: *** [ipc.o] Error 1
|
||||
|
||||
Il problema e' che Linux non prevede prototipi per queste funzioni inline.
|
||||
La soluzione e' di andare dentro la directory .../src/backend/storage/ipc
|
||||
ed editare Makefile.
|
||||
Cambia la linea
|
||||
CFLAGS+=$(INCLUDE_OPT)
|
||||
con
|
||||
CFLAGS+=$(INCLUDE_OPT) -Wno-error
|
||||
|
||||
Fai lo stesso con la directory ../src/backend/storage/lmgr.
|
||||
|
||||
1.17) Quando sto' compilando postgres, gcc riporta un signal 11 e si interrompe.
|
||||
Piu' specificatamente:
|
||||
gcc: Internal compiler error: program cc1 got fatal
|
||||
signal 11
|
||||
|
||||
Questo e' un problema di hardware/memoria. PostgreSQL e' un grande
|
||||
programma, e una larga compilazione con gcc (come la compilazione
|
||||
di PostgreSQL o la compilazione del kernel) stressa la memoria come
|
||||
molti altri programmi, mostrando errori che non appaiono nelle normali
|
||||
operazioni. Sistemi operativi inferiori non riescono a stressare l'hardware
|
||||
in questo modo, per questo non vedrai mai questi errori sotto DOS/Windows.
|
||||
|
||||
Maggiori informazioni in merito:
|
||||
http://www.bitwizard.nl/sig11
|
||||
|
||||
Da questo Sig11 FAQ, sembra essere un errore specifico con Redhat 5.0
|
||||
lanciando su un processore Cyrix. Guarda il link superiore per i dettagli!
|
||||
|
||||
1.18) Posso installare 6.1.1 su MkLinux?
|
||||
|
||||
Tatsuo Ishii <t-ishii@sra.co.jp> ha fatto questo su MkLinux DR2.1 update2 dopo una piccola
|
||||
patch disponibile presso:
|
||||
ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz
|
||||
|
||||
1.19) Perche' esce o va in crash??
|
||||
|
||||
Ci sono state diverse segnalazioni di gmake, dove in tutte si usciva
|
||||
subito e c'era una seg faulting. Il problema piu' marcato e' stato
|
||||
riportato con gmake 3.74 - upgradandolo alla 3.76.1 si e' risolto.
|
||||
Comunque, la versione 3.74 e' funzionante per altri tipi di setup.
|
||||
In breve, prova ad upgradare gmake all'ultima versione che puoi trovare
|
||||
prima di riportarlo come un problema.
|
||||
|
||||
1.20) Come posso ottimizzarlo per un 486 o un processore pentium
|
||||
|
||||
Le flags di compilazione per default non permettono l'optimizzazione per 486
|
||||
o per processori Pentium. Per aggiungerla come ottimizzazione, edita
|
||||
Makefile.custom e aggiungi:
|
||||
|
||||
CFLAGS+= -m486
|
||||
|
||||
o (per i nuovi compilatori che molte persone non stanno usando)
|
||||
|
||||
CFLAGS+= -mpentium
|
||||
o
|
||||
CFLAGS+= -mpentiumpro
|
||||
|
||||
1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio
|
||||
nel test di regressione 'timespan'?
|
||||
Le ore appaiono come: '4 hours 59 mins 60.00 secs'
|
||||
invece di '5 hours'
|
||||
|
||||
Questo e' un problema con le librerie glibc2 le quali appaiono con
|
||||
RedHat 5.0. Aggiorna le tue glibc con le ultime versioni di RedHat per
|
||||
v5.0/hurricane. Tutto quello che e' anteriore alle glibc-2.0.7 ha
|
||||
questi problemi.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Sezione 2: Compilare programmi accessori
|
||||
----------------------------------------------------------------------
|
||||
|
||||
2.1) Il linker non trova libX11 quando sta' compilando pgtclsh
|
||||
|
||||
Aggiungi la seguente riga al file src/Makefile.custom
|
||||
X11_LIBDIR = /usr/X11R6/lib
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Sezione 3: Problemi di esecuzione
|
||||
----------------------------------------------------------------------
|
||||
|
||||
3.1) Ricevo un messaggio tipo _fUnKy_POSTPORT_sTuFf_ non definito quando
|
||||
lancio uno script come createuser
|
||||
|
||||
Questo e' un bug nella V.1.06-V1.07 di Postgres ed e' fissata con la versione
|
||||
1.08 o superiore.
|
||||
|
||||
3.2) Lancio postmaster e dopo il sistema dice 'Bad system call(Core
|
||||
dumped)'
|
||||
|
||||
Questo indica che non hai compilato il supporto per la memoria condivisa nel
|
||||
kernel. Devi ricompilare il kernel per aggiungere questa feature.
|
||||
|
||||
3.3) Quando tento di lanciare Postmaster, perche' ricevo un errore del tipo
|
||||
Failed Assertion("!(file != 0):(null)", File:
|
||||
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
|
||||
!(file != 0) (0)
|
||||
initdb: could not create template database
|
||||
initdb: cleaning up.
|
||||
|
||||
I permessi sul file /dev/null sono sbagliati.
|
||||
|
||||
ls -l /dev/null should give you something like:
|
||||
|
||||
crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null
|
||||
|
||||
Correggi i permessi con:
|
||||
|
||||
chmod a+rw /dev/null
|
||||
|
||||
3.4) Perche' createuser non funziona?
|
||||
|
||||
C'e' un problema con la versione 2.5.3 di GNU Flex e createuser.
|
||||
Le tue opzioni devono recedere a Flex V2.5.2, aggiornale alla V2.5.4 o
|
||||
applica una patch alla V2.5.3 la quale e' fornita in doc/README.flex
|
||||
Puoi ottenere la V.2.5.4 da:
|
||||
ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz
|
||||
|
||||
3.5) Perche' ricevo un errore del tipo:
|
||||
IpcMemoryCreate: memKey=155356396 , size=760632 ,
|
||||
permission=384IpcMemoryCreate: shmget(..., create, ...)
|
||||
failed: Invalid argument
|
||||
|
||||
Non hai compilato il supporto IPC nel kernel di Linux.
|
||||
Devi ricompilare il kernel con questa opzione.
|
||||
|
||||
3.6) Perche' psql fallisce con:
|
||||
psql: can't load library 'libpq.so.1'
|
||||
|
||||
Psql e' stata compilata per linkarsi dinamicamente con la libreria libpq.
|
||||
|
||||
Per risolvere questo, devi accedere come root ed editare il file
|
||||
/etc/ld.so.conf
|
||||
Aggiungi una linea singola alla fine, la quale prende il nome della directory
|
||||
delle librerie di PostgreSQL (la sottodirectory delle librerie
|
||||
dell'installazione diPostgreSQL) e lancia
|
||||
/sbin/ldconfig -v
|
||||
|
||||
Alternativamente, (e se tu non hai accesso come root), devi usare la
|
||||
variabile di ambiente LD_LIBRARY_PATH.
|
||||
|
||||
La variabile LD_LIBRARY_PATH contiene una lista di paths per ricercare le librerie
|
||||
condivise. Questa lista e' ricercata prima delle librerie specificate da ldconfig.
|
||||
|
||||
Percio' sotto Bash, devi fare qualcosa del tipo:
|
||||
export LD_LIBRARY_PATH='PathToPGSQL'/lib
|
||||
o, usando tcsh
|
||||
setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
|
||||
rimpiazzando 'PathToPGSQL' con l'appropriato path alla tua directory PostgreSQL
|
||||
al top level.
|
||||
Nota che il comando ldd puo' essere eseguito su un programma linkato dinamicamente
|
||||
alla lista di paths a tutte le librerie condivise sopra, alle quali gli eseguibili
|
||||
dipendono.
|
||||
|
||||
|
||||
3.7) Altri comportamenti strani
|
||||
|
||||
Non sono sicuro quali siano i sintomi che non permettono la corretta esecuzione,
|
||||
ma si puo' ipotizzare che le ragioni vadano oltre il regolare funzionamento del
|
||||
loader dinamico nel caricare la corretta versione delle librerie libpq.
|
||||
Se hai una versione vecchia dai una occhiata al path delle librerie
|
||||
(per esempio in /usr/lib) che dovrebbero caricare nelle nuove versioni che intendi
|
||||
far girare. Renditi sicuro di prendere queste nel percorso e guarda la Domanda 3.6
|
||||
per i dettagli in merito al caricamento dinamico delle librerie.
|
||||
|
||||
3.8) Quando PostgreSQL e' attivo allo shutdown di sistema, Linux
|
||||
esegue al reboot un fsck al disco.
|
||||
|
||||
Ci sono state alcune segnalazioni di questo e sembre essere il
|
||||
risultato di lanciare PostgreSQL dal /etc/inittab come suggerito
|
||||
nel file INSTALL.
|
||||
|
||||
Si raccomanda percio' di lanciare il postmaster da un rc script.
|
||||
Sotto una versione di tipo Slackware, devi modificare /etc/rc.d/rc.local
|
||||
per lanciare il postmaster. Sotto una versione in stile RedHat
|
||||
devi creare uno script in stile SysV sotto /etc/rc.d/rc3.d basato
|
||||
sul file /etc/rc.d/init.d.
|
||||
|
||||
C'e' un esempio di file in contrib/linux/postgres.init
|
||||
|
||||
Un altro file di esempio è proposto da John Robinson
|
||||
<john@intelligent.co.uk> il quale puo' essere modificato a seconda delle esigenze:
|
||||
|
||||
#!/bin/sh
|
||||
#
|
||||
# postgreSQL.init This shell script takes care of starting and stopping
|
||||
# the PostgreSQL postmaster.
|
||||
#
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
# Source networking configuration.
|
||||
. /etc/sysconfig/network
|
||||
|
||||
# Check that networking is up.
|
||||
[ ${NETWORKING} = "no" ] && exit 0
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start)
|
||||
# Start daemons.
|
||||
echo -n "Starting postgres Postmaster daemon:"
|
||||
if [ -z "`pidofproc postmaster`" ]
|
||||
then
|
||||
su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &"
|
||||
echo -n " postmaster"
|
||||
else
|
||||
echo -n " (already running)"
|
||||
fi
|
||||
echo
|
||||
touch /var/lock/subsys/postgres
|
||||
;;
|
||||
stop)
|
||||
# Stop daemons.
|
||||
echo -n "Shutting down postgres Postmaster daemon: "
|
||||
killall -TERM postmaster 2>/dev/null
|
||||
killall -TERM postgres 2>/dev/null
|
||||
echo
|
||||
rm -f /var/lock/subsys/postgres
|
||||
;;
|
||||
*)
|
||||
echo "Usage: postgres {start|stop}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
|
||||
3.9) Perche' la Query 32 nel test di regressione pretende molto tempo?
|
||||
|
||||
Questo e' un bug nello script di regressione presente su Linux Os.
|
||||
Ci sono due raggiri per evitarli (informazione di Tatsuo Ishii <t-ishii@sra.co.jp>):
|
||||
|
||||
1. cambia quello che segue in regress.sh:
|
||||
time postgres -texecutor -tplanner -Q bench < bench.sql
|
||||
a:
|
||||
postgres -texecutor -tplanner -Q bench < bench.sql
|
||||
|
||||
2. dopo aver lanciato il test, rimuovi la linea finale di
|
||||
bench.out, qualcosa del tipo:
|
||||
85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k
|
||||
poi digita:
|
||||
sh ./perquery < bench.out > & bench.out.perquery
|
||||
|
||||
|
||||
|
||||
3.10) Perche' ricevo dei risultati arrotondati su date/time aritmetici,
|
||||
come
|
||||
select '4 hours'::timespan;
|
||||
returning '3 hours 59 minutes 60 seconds'?
|
||||
|
||||
Stai usando le nuove librerie glibc2 e hai una versione precedene alla
|
||||
2.0.7. E' un problema di arrotondamento matematico nella libreria.
|
||||
Aggiorna le tue librerie.</PRE>
|
||||
|
||||
<PRE>
|
||||
----------------------------------------------------------------------------
|
||||
Dr. Andrew C.R. Martin University College London
|
||||
EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk
|
||||
URL: http://www.biochem.ucl.ac.uk/~martin
|
||||
Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775
|
||||
----------------------------------------------------------------------------
|
||||
Daniele Medri 'MaDriD' - e-mail: madrid@darshan.org web: www.darshan.org
|
||||
----------------------------------------------------------------------------</PRE>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
168
doc/src/FAQ/FAQ_solaris.html
Normal file
168
doc/src/FAQ/FAQ_solaris.html
Normal file
@ -0,0 +1,168 @@
|
||||
<PRE>
|
||||
=======================================================
|
||||
Frequently Asked Questions (FAQ) for PostgreSQL V6.5
|
||||
Sun Solaris Specific
|
||||
TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ
|
||||
=======================================================
|
||||
last updated: Thu Sep 21 9:30:00 CET 1999
|
||||
|
||||
current maintainer: Marc Liyanage (liyanage@access.ch)
|
||||
original author: Marc Liyanage (liyanage@access.ch)
|
||||
|
||||
|
||||
|
||||
Contents:
|
||||
|
||||
1.1) What tools do I need to build and install PostgreSQL on Solaris?
|
||||
1.2) What else do I have to do before building PostgreSQL?
|
||||
1.3) Why am I getting "IpcMemoryCreate" errors when I try
|
||||
to run postmaster?
|
||||
1.4) Why am I getting "Can't tell what username to use" errors
|
||||
when I try to run initdb?
|
||||
|
||||
A) Contributors
|
||||
|
||||
|
||||
|
||||
Notes:
|
||||
|
||||
- The commands given here are for the bash shell. If you use
|
||||
a different shell, you'll have to change the commands accordingly,
|
||||
especially these regarding environment variables.
|
||||
|
||||
- These instructions are written for Solaris 2.6
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section 1: Building and Installing PostgreSQL
|
||||
----------------------------------------------------------------------
|
||||
|
||||
1.1) What tools do I need to build and install PostgreSQL on Solaris?
|
||||
|
||||
You will need
|
||||
|
||||
- GNU flex 2.5.4 or better (the lex included in Solaris 2.6 won't work)
|
||||
- GNU bison (the yacc included in Solaris 2.6 won't work)
|
||||
- GNU zip (gzip and especially zcat for installing the docs)
|
||||
- GNU make
|
||||
- GNU readline library
|
||||
|
||||
We also used
|
||||
|
||||
- GNU cc (gcc 2.8.1)
|
||||
|
||||
If you like Solaris packages, you can find these tools here:
|
||||
http://www.sunfreeware.com
|
||||
|
||||
If you prefer sources, look here:
|
||||
http://www.gnu.org/order/ftp.html
|
||||
|
||||
|
||||
|
||||
|
||||
1.2) What else do I have to do before building PostgreSQL?
|
||||
|
||||
Shared libraries
|
||||
----------------
|
||||
|
||||
The default installation procedure puts the shared libraries
|
||||
into "/usr/local/pgsql/lib", but the dynamic loader won't
|
||||
find them there at runtime unless you use some hack like
|
||||
symlinking the libraries in /usr/lib or setting LD_LIBRARY_PATH
|
||||
for every user that will use the DB system.
|
||||
|
||||
The first time you'll encounter this problem is usually when
|
||||
running "initdb". It will fail with something like
|
||||
|
||||
ld.so.1: pg_id: fatal: libpq.so: open failed: No such file or directory
|
||||
|
||||
We recommend that you store the path of the directory containing
|
||||
the libraries in the environment variable LD_RUN_PATH *before*
|
||||
starting the build. This will cause the linker to store this
|
||||
path in the binaries.
|
||||
|
||||
Do this:
|
||||
|
||||
# export LD_RUN_PATH=/usr/local/pgsql/lib
|
||||
|
||||
(or wherever you choose to put the libraries)
|
||||
|
||||
There is some good information about this here:
|
||||
http://www.visi.com/~barr/ldpath.html
|
||||
|
||||
|
||||
zcat
|
||||
----
|
||||
|
||||
If
|
||||
|
||||
- both the original solaris zcat as well as the recommended
|
||||
GNU zcat are installed on the system (e.g. the former in /usr/bin and
|
||||
the latter in /usr/local/bin) and
|
||||
- configure (or "which zcat") finds the wrong one
|
||||
|
||||
then configure needs to be told where GNU zcat can be found.
|
||||
|
||||
Failure to do so will cause configure to select the wrong one
|
||||
and the "gmake install" command in the "doc" subdirectory
|
||||
(step 12 in the INSTALL file) will fail because Solaris
|
||||
zcat cannot handle the .gz compressed documentation files.
|
||||
|
||||
To fix this, type
|
||||
|
||||
# export GZCAT=/usr/local/bin/zcat
|
||||
|
||||
(or wherever your GNU zcat lives)
|
||||
|
||||
before running configure.
|
||||
|
||||
|
||||
|
||||
|
||||
1.3) Why am I getting "IpcMemoryCreate" errors when I try
|
||||
to run the postmaster?
|
||||
|
||||
(See also 3.4 in the main FAQ file)
|
||||
|
||||
Under Solaris 2.6 and probably others, the default shared memory
|
||||
maximum segment size kernel parameter is set too low. The solution
|
||||
is to put something like the following line into /etc/system and
|
||||
reboot the system.
|
||||
|
||||
set shmsys:shminfo_shmmax=0x7fffffff
|
||||
|
||||
Excellent info regarding shared memory under Solaris can be found here:
|
||||
http://www.sunworld.com/swol-09-1997/swol-09-insidesolaris.html
|
||||
|
||||
|
||||
|
||||
|
||||
1.4) Why am I getting "Can't tell what username to use" errors
|
||||
when I try to run initdb?
|
||||
|
||||
Put something like this into the .bash_profile startup script
|
||||
of the postgres user (see also step 17 in the INSTALL file):
|
||||
|
||||
export USER=postgres
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Section A: Contributors
|
||||
----------------------------------------------------------------------
|
||||
|
||||
- Jose Luis Rodriguez Garcia
|
||||
Suggested to change the shmmax parameter in 1.3 from 0xffffffff to 0x7fffffff
|
||||
because the value is a signed integer in Solaris versions prior to 2.6.
|
||||
|
||||
|
||||
|
||||
</PRE>
|
||||
|
Loading…
x
Reference in New Issue
Block a user