Readme for the Postgres port to Linux. Q: What is most important? -------------------------- You need IPCDELTA (or any newer version, of course). Read below under Q: Kernel? Q: What is also important? -------------------------- You need a running tcp/ip network, at least for the loopback device. The files necessary to set up the later are included in both the binary and source package, in the archive loopback.tar. Q: Which packages do I need? ---------------------------- postgres4.0.1a.doc.tar.z: documentation, get it. postgres4.0.1a.demo.tar.z: demos, get them. postgres4.0.1a.bin.tar.z: binaries. postgres4.0.1a.libpq.tar.z: libraries for application development. postgres4.0.1a.src.tar.z: The source code, of course. You need the libpq package, if you want to access the database from C code. It contains all global header files, as well as the static libpq.a library. You don't need this package, if you get the source. Version summary --------------- Postgres: 4.0.1 This port: 0.1 Linux Kernel: 0.99.7 or higher (for IPCDELTA) IPC: Delta Shared Libs: 4.3.3 Quick Installation Guide: ------------------------- - Get IPCDELTA into your kernel. - Run "patch <'this_file'" from the /usr/src/linux directory. - Recompile the kernel. - Create a user named postgres, user id 6 (!), with /bin/tcsh as Shell. - Make /usr/postgres be his or her home directory, or a symlink to it. - Give him a .login, which sets POSTGRESHOME to the home directory, and puts $POSTGRESHOME/bin into his PATH. - Unpack the postgres4.0.1a.doc.tar.z in this directory. - Get and unpack the demos postgres4.0.1a.demo.tar.z, too. - Unpack either postgres4.0.1a.src.tar.z or postgres4.0.1a.bin.tar.z. - Run the sripts moveme.[doc|src|bin|libpq|demo], if you're not on a Minix filesystem (to get all long names right). - Read the setup.me in the doc section. - If you have the binary distribution, run initdb. - With the source, cd to newconf; type Make install; wait. - Have fun! - Don't flame me! E-Mail: ------- This is the first release of a Postgres port to Linux. Please report success or failure, bug reports, and - better - bug fixes to: Kai Petzke, wpp@marie.physik.tu-berlin.de [Stop reading now, if you don't like README's] Q: What is Postgres? -------------------- Postgres is a relational database management system. It has many of new ideas inplemented, among them are: - dynamic loading of datatypes and functions into the database (for example, you could define complex numbers as datatypes, provide all the function for complex arithmetics, and then retrieve all records, where the absolute value of the exponent of one field is bigger than a given value ...). - A transaction level rule system (say you got two relations (= database tables), one containing the accounts with the totals, one with the bookings. You could then write a rule, that always updates the totals, when a new booking is inserted). - A transparent history system, so you can query the state of the database at any time in the past (unless you use the vacuum cleaner, which slurps up all the outdated stuff ...). - Support for Write Once, Read Multiple (WORM) storage devices. - Many, many others ... Refer to the postgres.FAQ at the bottom of this README for more information. Q: Space requirements? ---------------------- Binaries: 2 MB HD Space + Database space 4 MB RAM + some swap, if nothing else is running. (maybe more, I have 8 MB and did not test with 4) Docs: a) troff source: 2 MB HD b) postscript dump: 2 MB HD Q: Kernel? ---------- a) IPC ------ The version of your kernel should be uncritical, but you must have SYS/V IPC (Inter-Process-Communication) compiled into it. The current version of this package, ipcdelta, goes straightforward into 99pl7, needs one patch to be applied by hand for 99pl8, and so are two for 99pl9. Read the IPCDELTA's READMEs on how to install the package. Special instructions for 99pl8 and 99pl9 only: ---------------------------------------------- Don't try to apply the patches in the file named fsync.cd - there is already a dumb function definition for fsync in the kernel sources. There is one patch on the file kernel/sys.c, which fails. It deletes a dumb definition of the ipc call. Look for the lines: int sys_ipc(void) { return -ENOSYS; } in kernel/sys.c, and delete them by hand. Special instructions for 99pl9 only: ------------------------------------ Replace "copy_page_tables" by "copy_vm" in the ipc.cd file, *before* you apply the patches in this file. Otherwise, a patch to the file kernel/fork.c fails. Don't try to use the clone() system call with processes, which use ipc ... Back to all kernels: -------------------- There is a bug in ipcdelta, which breaks Postgres. Apply the following patch, before you recompile the kernel: (Don't cut this file to pieces. Fed it as a whole, as is, to patch, and realize, that this clever program still does the right thing!) --- ipc/sem.old.c Tue Mar 16 18:56:14 1993 +++ ipc/sem.c Fri Apr 16 15:50:47 1993 @@ -276,7 +276,7 @@ return -EACCES; for (i=0; i< sma->sem_nsems; i++) sem_io[i] = sma->sem_base[i].semval; - memcpy_tofs (sem_io, array, nsems*sizeof(ushort)); + memcpy_tofs (array, sem_io, nsems*sizeof(ushort)); break; case SETVAL: if (ipcperms (ipcp, 0222)) @@ -316,6 +316,8 @@ wake_up (&sma->eventn); if (sma->eventz) wake_up (&sma->eventz); + for (i=0; i < nsems; i++) + sma->sem_base[i].semval = sem_io[i]; sma->sem_ctime = CURRENT_TIME; break; default: For the Postgres binaries, you won't need to build the libipc.a library, but you might need the ipcs and ipcrm utilities to clear up the ipc stuff after a Postgres crash. b) TCP/IP --------- You need it, so don't build a kernel without it. c) fsync() ---------- There are kernel patches, which implement this function call. Postgres by default uses fsync() after each write() to write the data to disk, but I've commented these out for the current version of Postgres (ipcdelta was enough kernel patching) ... Q: Libraries: ------------- Sorry, I linked everything with the 4.3.3 shared libs, so you need these in order to run the binary distributed Postgres. Q: How do I install Postgres? ----------------------------- Get the docs and demos, and either the binaries or sources. Get libpq, too, if you use the binary distribution, and if you want to use Postgres from C Programs. To unpack any of these packages, type the following in the Postgres home directory: zcat postgres4.0.1a.???.tar.z | gtar xfv - There are detailed instructions on the initial setup of Postgres in the file doc/postgres-setup.me. To view it, type: groff -Tascii -me doc/postgres-setup.me | less There is almost nothing, which is Linux-specific (apart from the section about IPC). Q: And if user ID 6 is already used by someone else? ---------------------------------------------------- Give the old user with this ID a new one. Execute the following: chown new_user-ID `find / -uid 6` Q: Loopback network setup? -------------------------- There is a file named "loopback.tar" in both the binary and source distribution. Type "gtar tf loopback.tar", to get a list of the files in it, and save all the files and directories, which have any of the names in this list. Then delete the directories /usr/etc/inet and /etc/inet, and unpack the loopback.tar archive with: gtar -C / -x -f loopback.tar Last step: edit /etc/hosts and /etc/resolv.conf to represent your hostname (my was safran). However, the domain name does not matter at all. Include the line: sh /etc/rc.net in your /etc/rc.local or /etc/rc file. Q: Compiling myself? -------------------- If you want to compile the baby yourself, you should have at least 4 MB of *free* RAM. You need at least 20 MB of disk space. To compile everything with the debugger option -g you should have about 50 MB HD and 16 MB Ram. Without the later, gdb is of almost no use, as the symbol gets too big. You need tcsh, a pwd executable, the getopt command, Berkeley Yacc, flex, cb, and bug-fixed versions of awk (2.14 or newer) and sed (1.13 or newer). You can find out awk's version with "awk -V" or "awk -W version". If you get an error message as answer, you are very likely to have an old version ... Check "sed -V" as well. If you don't have cb ("beautifies" C programmes - does nothing but change the spacing of its input), make it a shell script with the single line: cat I used Berkeley Yacc to compile Postgres. I did not even try bison, so you might have good luck or not. Berkeley Yacc is usually in a package called byacc, which you could find with the Ingres Port (which it was used for, too). The usual work-around for missing pwd ("alias pwd 'echo $cwd'" in your .cshrc) does not work with the C-Shell scripts of Postgres. I supply two fast hacks for pwd (written by me - really no problem), and getopt in a file called commands.tar. Some shell scripts use full path names, and you are likely to have some of these binaries somewhere else. So check, that /usr/bin/awk /usr/bin/bc /usr/bin/lex /usr/bin/yacc /bin/sed exist, or are links to the real locations of these. Also, check that /lib/cpp is a link to an existing C Preprocessor (you might have forgotten to update this link, when you upgraded to a new version of Gnu CC). The Postgres FAQ: ----------------- Frequently Asked Questions about Postgres Q: What Is Postgres? Postgres is a database research project under Prof. Michael Stonebraker at U. C. Berkeley. To facilitate research efforts, a software test-bed was created; this is the "Postgres" DBMS software. The Postgres DBMS is extended relational or object oriented, depending on the buzzword du jour. The major purpose of this software is to provide a platform and a basis for the testing of implementations of new ideas in database research. Several graduate students, staff members, as well as undergraduate programmers have been working on the implementation of the Postgres software. After this paragraph, all references to "Postgres" refer to the software itself. Postgres Is: o Relational. One of the major goals of Postgres is to show that an essentially relational DBMS can be extended to handle complex objects, rules, and be highly extensible. o Highly extensible. Postgres allows user-defined operators, user-defined objects, and user-defined functions. o While Postgres is relational, object oriented ideas have been implemented in Postgres (inheritance, etc). o Numerous other features, such as query language procedures, rules, etc. which are beyond the scope of this discussion. For more info on the Postgres research itself, you can get the Postgres technical documentation described below. Q. What is the connection between Postgres and Ingres? A. There is none, aside from Prof. Stonebraker. There is no compatibility between the two software packages, and the research projects have differing objectives. We do not support University Ingres at all; questions about it should be sent to the USENET group "comp.databases". Q. How do I get the Postgres software package? A. In one of two ways: 1. Via anonymous FTP from postgres.berkeley.edu (Internet 128.32.149.1); the important files are pub/postgres-v4r0r1.tar.Z (Note: should be transmitted in BINARY mode.) pub/postgres-setup.me 2. If you don't have Internet access, you can get Postgres by sending a check for US $150 payable to Regents of the University of California This should be addressed to The Postgres Project 557 Evans Hall University of California Berkeley, CA 94720 Indicate in your accompanying letter whether you want the system on a 9-track tape at 1600 BPI, at 6250 BPI, on a Sun cartridge tape (QIC 24 format), or on a TK50 DEC cartridge tape. Sorry - we cannot deliver Postgres via e-mail. Q. What is the Postgres query language? A. Postquel, which is an incompatible superset of Quel. Q. What about SQL support? A. We do not support SQL at this time. Q. What does Postgres run on? A. Postgres 4.0.1 is supported on Sun 4, Sparc, and DECstations running Ultrix 4.0 or higher. Ports are distributed (but not supported) for Sun 3's and Sequent Symmetry machines. We are aware of ports for Solbourne (a Sparc multiprocessor), MIPS workstations, and the Sun 386i, although we do _not_ have access to these ports and do not intend to support them. The experience of outside developers indicates that Postgres is relatively easy to port to any system that supports: 1. Berkeley-style sockets 2. System V shared memory and semaphores 3. A K & R compatible C compiler 4. Other "normal" Unix system calls Some header file problems may be encountered; these are easily fixed by a programmer knowledgable with the local OS. The most difficult part of the port is porting the dynamic object code loader, which requires interpreting object file headers. Q. How do I get papers about Postgres? A. On postgres.berkeley.edu is a file called pub/postgres-papers.tar.Z which contains troff and Postscript versions of several of the major Postgres technical reports. If you don't have Internet access, you can order hard-copies of technical reports individually; for more details, send e-mail or call Sarah Burke at (510) 642-3417; her e-mail address is sarahb@postgres.berkeley.edu Q. What is the status of the Postgres implementation? A. It is not up to commercial levels of reliability. I would not want _my_ payroll records in it :-) However, it is quite adaquate for managing scientific and experimental datasets and as an instructional system. Its speed on applications which stress transaction processing is not particularly good, but it is within about 50% of commercial systems on the more "report-oriented" Wisconsin benchmark, and is twice as fast as University Ingres on the Wisconsin. Q. Does Postgres have a user interface? A report generator? A. No and no, not as shipped. Q. What about a C-callable interface for writing applications? A. There most definitiely is one, called libpq. There is also an interface for referencing Postgres data from shell scripts. Get the Postgres reference manual for details. Q. Is there a BBS/discussion group about Postgres? A. Yes - the mailing list postgres@postgres.berkeley.edu has over two hundred readers and gateways; you can subscribe to the mailing list by sending mail to postgres-request@postgres.berkeley.edu with "ADD" as the Subject. You UNsubscribe from the mailing list by sending mail to postgres-request@postgres.berkeley.edu with "DEL" as the Subject. Q. How do I make a bug report? A. If you find a bug, send a description of your database schema, queries, and a stack dump (type "where" in DBX) if possible to bug-postgres@postgres.berkeley.edu Q. How do I find out about known bugs? A. The known bug list is on Postgres in the file pub/postgres-v4r0r1.bugs Q. Please summarize the important files on postgres.berkeley.edu A. File Purpose pub/postgres-v4r0r1.tar.Z Complete Postgres distribution pub/postgres-v4r0r1.bugs Postgres 4.0.1 known bug list and workarounds pub/postgres-setup.me Postgres Installation instructions in troff pub/postgres-papers.tar.Z Postgres papers pub/picasso-README Instructions for getting Picasso Q. Please summarize the important Postgres mailing aliases A. Mailing Address Purpose postgres@postgres Postgres general discussion and announcements postgres-request@postgres Administrative requests (ADD/DEL) bug-postgres@postgres Postgres bug reports postgres-questions@postgres Questions to the developers of Postgres picasso@postgres Questions to the Picasso group Q. Please summarize the main contacts at the Postgres group A. Address/Phone Role Marc Teitelbaum Postgres Chief Programmer marc@postgres.berkeley.edu (510) 643-6138 Sarah Burke Assistant to the Postgres group sarahb@postgres.berkeley.edu (510) 642-3417 Comments an the postgres.faq: ----------------------------- The postgres.faq says: The experience of outside developers indicates that Postgres is relatively easy to port to any system that supports: 1. Berkeley-style sockets 2. System V shared memory and semaphores 3. A K & R compatible C compiler 4. Other "normal" Unix system calls Some header file problems may be encountered; these are easily fixed by a programmer knowledgable with the local OS. The most difficult part of the port is porting the dynamic object code loader, which requires interpreting object file headers. The reverse was true: I had trouble with almost anything, but the dynamic object code loader was easy, as Linux uses an executable format similiar to that of a sun. Many Header files contained wrong prototypes, so I had indeed to fix lots of header file problems, not with Linux, but Postgres. It seems, that Linux and gcc are very strict with floating point data types. Lots of #include's were missing, so floating point values weren't fetched off the FPU stack, which lead to a floating point exception soon. Functions like log(x) were called with x = 0, which produced core files, too. The same expressions must run on Sparcstations with much less trouble. The worst thing was to move from standard unix lex to flex. Don't believe, that the Postgres scanner scans a query word by word from the left to the right! Bugs: ----- The Postgres V4.0.1 was only a bug fix release relative to 4.0, so don't believe, you will have a robust database system with this version of Postgres. Also note, that this port is an ALPHA release. However, there are no bugs known to me, apart those mentioned in doc/release.4.0.1. I tried my best to make this port clean, but if you find bugs, please e-mail to: Kai Petzke, wpp@marie.physik.tu-berlin.de Questions, Problems: -------------------- Feel free to ask, but please read this readme, the Linux' FAQs and postgres-setup.me before you bomb me with e-mail. Please be patient, I read e-mail two or three times a week only. Future Plans: ------------- 1) Make this port stable. 2) Port picasso, the graphical front-end under X. 3) Upgrade to the newer Postgres release 4.1. Have fun!