postgresql/doc
Peter Eisentraut aae70b2dca more psql bug squashing:
\copy without arguments failed
commands with too many arguments were too silent
2000-04-16 15:46:40 +00:00
..
src more psql bug squashing: 2000-04-16 15:46:40 +00:00
TODO.detail Update TODO list. 2000-01-28 03:46:06 +00:00
admin.ps.gz Fix typos and wording in v6.5 release summary per Fred Horsh. 1999-06-14 06:55:45 +00:00
admin.tar.gz HTML versions of docs for v6.5 release. 1999-06-14 06:59:34 +00:00
bug.template Update for 6.6. 1999-07-18 18:06:42 +00:00
FAQ Update HISTORY file for 7.0. 2000-03-23 06:30:58 +00:00
FAQ_AIX Update from Andreas Zeugswetter <andreas.zeugswetter@telecom.at> 1999-09-14 15:34:49 +00:00
FAQ_DEV Update developers faq. 1999-12-24 16:46:11 +00:00
FAQ_DigitalUnix
FAQ_FreeBSD
FAQ_HPUX
FAQ_Irix Install proper Irix FAQ. 1999-06-08 16:27:26 +00:00
FAQ_Linux
FAQ_QNX4 Update QNX FAQ 2000-04-04 13:49:30 +00:00
FAQ_SCO
FAQ_Solaris Fix to give super user and createdb user proper update catalog rights. 1999-09-27 16:44:56 +00:00
internals.ps
KNOWN_BUGS Add files to point to TODO list. 1999-07-01 05:31:22 +00:00
Makefile Clean up doc/Makefile to install manual pages. 1999-12-05 21:23:00 +00:00
man.tar.gz Switch from old man pages to new ones generated from sgml. 1999-08-08 15:09:04 +00:00
MISSING_FEATURES Add files to point to TODO list. 1999-07-01 05:31:22 +00:00
postgres.tar.gz HTML versions of docs for v6.5 release. 1999-06-14 06:59:34 +00:00
programmer.ps.gz Fix URL for Norm Walsh's Style Sheets. 1999-06-14 06:56:31 +00:00
programmer.tar.gz HTML versions of docs for v6.5 release. 1999-06-14 06:59:34 +00:00
README.Charsets I've sent 3 mails to pgsql-patches. There are two files, one for doc 1999-08-16 20:27:19 +00:00
README.fsync
README.inet
README.locale Typo fix 1999-08-16 20:32:34 +00:00
README.mb Update multi-byte support README 2000-03-24 01:37:11 +00:00
README.mb.jp Prepare for 7.0 release 2000-03-23 02:04:07 +00:00
README.NT Update README.NT with new NT ipc location. 2000-02-14 12:29:58 +00:00
TODO Updates create_function.sgml with fixes for new foreign keys 2000-04-14 21:44:21 +00:00
tutorial.ps.gz
tutorial.tar.gz HTML versions of docs for v6.5 release. 1999-06-14 06:59:34 +00:00
user.ps.gz User's Guide for v6.5. 1999-06-14 06:25:03 +00:00
user.tar.gz Fix cross-reference to large objects in the CREATE TYPE section. 1999-06-14 16:32:41 +00:00

Installing PostgreSQL on NT:

---------------------------------------------------------------------------

It can be done by done by typing configure, make and make install.

1. Install the Cygwin package
2. Update to EGCS 1.1.2
   (This may be optional.)

---------------------------------------------------------------------------

				OPTIONAL

1. Install the Andy Piper Tools (http://www.xemacs.freeserve.co.uk/)
   (This may be optional.)
   You need at least the crypt library (also available as
   ftp://sourceware.cygnus.com/pub/cygwin/xfree/libcrypt-cygwin-b20.1.tar.bz2)

---------------------------------------------------------------------------

			  CYGWIN32 INSTALLATION

1. Download the Cygwin32 IPC Package by Ludovic LANGE 
   http://penguin.cz/~horak/cygwin32_ipc-1.03.tar.gz
2. Untar the package and follow the readme instructions.
3. Apply the patch at the end of this file to the cygipc sources
   before compiling the library.
4. I tested 1.03.
5. I used the \cygwin-b20\h-i568-cygwin32\i586-cygwin32\lib and
\cygwin-b20\h-i568-cygwin32\i586-cygwin32\include\sys instead of the
/usr/local/lib and usr/local/include/sys.

NOTE:
Also, the cygnus-bindir has to be placed in the path before the
NT-directories, because the sort.exe has to be taken for cygnus, not
NT.

---------------------------------------------------------------------------

		   POSTGRESQL INSTALL WITH NT SPECIFICS

1. Download the current version of PostgreSQL.
2. Untar the package.
3. Copy the files from \pgsql\src\win32 according to the readme file.
4. Edit \pgsql\src\template\cygwin32 if needed (I had to adjust the YFLAGS
path).
5. ./configure
6. make
7. create the directory /usr/local/pgsql manually: the mkdir cannot create a
directory 2 levels deep in one step.
8. make install
9. cd /usr/lical/pgsql/doc
10. make install
11. Set the environmental data
12. Initdb --username=jkr (do not run this command as administrator)

13. Open a new Cygwin command prompt
14. Start "ipc-deamon&" (background proces)
15. Start "postmaster -i 2>&1 > /tmp/postgres.log &" (background proces)
16. Start "tail -f /tmp/postgres.log" to see the messages

17. cd /usr/src/pgsql/src/test/regress
18. make all runtest

All test should be run.

NOTE:
By default, PostgreSQL clients like psql communicate using unix domain
sockets, which don't work on NT.  Start the postmaster with -i, and 
when connecting to the database from a client, set the PGHOST
environment variable to 'localhost' or supply the hostname on the
command line.

Joost

PS: If you still have problems you can mail to Dan Horak <dan.horak@email.cz>
    who is the maintainer for the win32 port

---------------------------------------------------------------------------

*** ./ipc-daemon.c.orig	Tue Dec 01 00:04:24 1998
--- ./ipc-daemon.c	Fri Sep 24 13:34:16 1999
***************
*** 270,285 ****
         {
          itoa(100*id+Index, LBuff) ;
          LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ;
! 	while (LAdrSem->current_nb[id].current_nb[Index] > 0 )
! 	{
!     	 WaitForSingleObject(LHandle, 0) ;
! 	 LAdrSem->current_nb[id].current_nb[Index]-- ;
! 	}
! 	CloseHandle(LHandle) ;
         }
         LAdrSem->semary[id] = IPC_UNUSED ;
         LAdrSem->state[id]  = 0 ;
        }
        else
        {
         for (Index = 0; Index < sma->sem_nsems; Index++)
--- 270,284 ----
         {
          itoa(100*id+Index, LBuff) ;
          LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ;
!         while (WaitForSingleObject(LHandle, 0) == WAIT_OBJECT_0)
!           ;
!         LAdrSem->current_nb[id].current_nb[Index] = 0;
!         CloseHandle(LHandle) ;
         }
         LAdrSem->semary[id] = IPC_UNUSED ;
         LAdrSem->state[id]  = 0 ;
        }
+ /*
        else
        {
         for (Index = 0; Index < sma->sem_nsems; Index++)
***************
*** 288,293 ****
--- 287,293 ----
          LHandle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, LBuff) ;
         }
        }
+ */
       }
      }
  
*** ./msg.c.orig	Tue Dec 01 00:16:09 1998
--- ./msg.c	Fri Sep 17 12:50:50 1999
***************
*** 57,62 ****
--- 57,77 ----
  static int		  GFirstMsg	 = 0;		/*PCPC*/
  static int		  GFdMsg	    ;		/*PCPC*/
  
+ /*****************************************/
+ /*	Initialization of static variables   */
+ /*****************************************/
+ static pid_t GProcessId = 0;
+ static void init_globals(void)
+ {
+ 	pid_t pid;
+ 
+ 	if (pid=getpid(), pid != GProcessId)
+ 	{
+ 		GFirstMsg = 0;
+ 		msgbytes = msghdrs = msg_seq = used_queues = max_msqid = 0;
+ 		GProcessId = pid;
+ 	}
+ }
  /************************************************************************/
  /* Demande d'acces a la zone partagee de gestion des semaphores		*/
  /************************************************************************/
***************
*** 79,84 ****
--- 94,100 ----
  {
   int LRet ;
  
+  init_globals();
   if( GFirstMsg == 0 )
   {
    if( IsGSemMsgExist() )
*** ./sem.c.orig	Tue Dec 01 00:16:25 1998
--- ./sem.c	Fri Sep 17 12:47:11 1999
***************
*** 58,63 ****
--- 58,78 ----
  static int		  GFirstSem	 = 0;		/*PCPC*/
  static int		  GFdSem	    ;		/*PCPC*/
  
+ static pid_t	GProcessId = 0;
+ 
+ static void	init_globals(void)
+ {
+ 	pid_t pid;
+ 
+ 	if (pid=getpid(), pid != GProcessId)
+ 	{
+ 		GFirstSem = 0;
+ 		used_sems = used_semids = max_semid = 0;
+ 		sem_seq = 0;
+ 		GProcessId = pid;
+ 	}
+ }
+ 
  /************************************************************************/
  /* Demande d'acces a la zone partagee de gestion des semaphores		*/
  /************************************************************************/
***************
*** 77,82 ****
--- 92,98 ----
  {
      int LRet ;
  
+ 	init_globals();
      if( GFirstSem == 0 )
      {
  	if( IsGSemSemExist() )
***************
*** 187,193 ****
      {
  	CloseHandle ( LHandle ) ;
      }
!     LHandle = CreateSemaphore(NULL, 0, 0x7FFFFFFF, LBuff) ;
      if( LHandle == NULL )
      {
  	printf( "Creation de Semaphore \"Sem\" impossible\n" ) ;
--- 203,209 ----
      {
  	CloseHandle ( LHandle ) ;
      }
!     LHandle = CreateSemaphore(NULL, 0, 1, LBuff) ;
      if( LHandle == NULL )
      {
  	printf( "Creation de Semaphore \"Sem\" impossible\n" ) ;
***************
*** 357,371 ****
  debug_printf("do_semop : return -EACCES\n");
  			CYGWIN32_IPCNT_RETURN (-EACCES) ;
  		    }
! 		    ReleaseSemaphore(LHandle, sop->sem_op, &LVal) ;
! 	    	    shareadrsem->current_nb[id].current_nb[sop->sem_num] +=
! 					sop->sem_op ;
  		    sem_deconnect() ;
  		} else {
  		    if( sop->sem_flg == IPC_NOWAIT )
  		    {
! 			LRet = WaitForSingleObject(LHandle, 0) ;
! 			if( LRet == WAIT_TIMEOUT )
  			{
  debug_printf("do_semop : return -EAGAIN\n");
  			    CYGWIN32_IPCNT_RETURN (-EAGAIN) ;
--- 373,386 ----
  debug_printf("do_semop : return -EACCES\n");
  			CYGWIN32_IPCNT_RETURN (-EACCES) ;
  		    }
!     	    shareadrsem->current_nb[id].current_nb[sop->sem_num] +=
! 				sop->sem_op ;
  		    sem_deconnect() ;
+ 		    ReleaseSemaphore(LHandle, 1 , &LVal) ;
  		} else {
  		    if( sop->sem_flg == IPC_NOWAIT )
  		    {
! 			if( sop->sem_op + shareadrsem->current_nb[id].current_nb[sop->sem_num] <0 )
  			{
  debug_printf("do_semop : return -EAGAIN\n");
  			    CYGWIN32_IPCNT_RETURN (-EAGAIN) ;
***************
*** 375,390 ****
  debug_printf("do_semop : return -EACCES\n");
  			    CYGWIN32_IPCNT_RETURN (-EACCES) ;
  			}
! 	    		shareadrsem->current_nb[id].current_nb[sop->sem_num] -= 1 ;
  			sem_deconnect() ;
  		    } else {
! 			LRet = WaitForSingleObject(LHandle, INFINITE) ;
  			if (sem_connect() == 0)
  			{
  debug_printf("do_semop : return -EACCES\n");
  			    CYGWIN32_IPCNT_RETURN (-EACCES) ;
  			}
! 			    shareadrsem->current_nb[id].current_nb[sop->sem_num] -= 1 ;
  			    sem_deconnect() ;
  		    }
  		}
--- 390,407 ----
  debug_printf("do_semop : return -EACCES\n");
  			    CYGWIN32_IPCNT_RETURN (-EACCES) ;
  			}
! 	    		shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op;
  			sem_deconnect() ;
  		    } else {
! 		    while(sop->sem_op + shareadrsem->current_nb[id].current_nb[sop->sem_num] <0)
! 				LRet = WaitForSingleObject(LHandle, INFINITE) ;
! 		    
  			if (sem_connect() == 0)
  			{
  debug_printf("do_semop : return -EACCES\n");
  			    CYGWIN32_IPCNT_RETURN (-EACCES) ;
  			}
! 			    shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op ;
  			    sem_deconnect() ;
  		    }
  		}
***************
*** 435,441 ****
  	char LBuff[100] ;
  	HANDLE LHandle ;
  	long LPrevious ;
- 	int LIndex;
  
  debug_printf("semctl : semid=%X semnum=%X cmd=0x%02X arg=%p\n",semid,semnum,cmd,arg);
  	if (semid < 0 || semnum < 0 || cmd < 0)
--- 452,457 ----
***************
*** 568,589 ****
  		if( LHandle != NULL )
  		{
  		    if( arg.val > shareadrsem->current_nb[id].current_nb[semnum] )
! 		    {
! 			ReleaseSemaphore(LHandle,
! 			arg.val-shareadrsem->current_nb[id].current_nb[semnum],
! 			&LPrevious) ;
! 		    }
! 		    else if (arg.val <
! 		             shareadrsem->current_nb[id].current_nb[semnum] )
! 		    {
! 			for( LIndex = arg.val;
! 			LIndex < shareadrsem->current_nb[id].current_nb[semnum];
! 			LIndex++ )
! 			{
! 			    WaitForSingleObject(LHandle, 0) ;
! 			}
! 		    }
!             	    shareadrsem->current_nb[id].current_nb[semnum] = arg.val ;
  		}
  debug_printf("semctl : SETVAL : return 0\n");
  		CYGWIN32_IPCNT_RETURN_DECONNECT (0);
--- 584,591 ----
  		if( LHandle != NULL )
  		{
  		    if( arg.val > shareadrsem->current_nb[id].current_nb[semnum] )
! 				ReleaseSemaphore(LHandle,1,&LPrevious) ;
!             shareadrsem->current_nb[id].current_nb[semnum] = arg.val ;
  		}
  debug_printf("semctl : SETVAL : return 0\n");
  		CYGWIN32_IPCNT_RETURN_DECONNECT (0);
*** ./shm.c.orig	Fri Sep 17 12:46:24 1999
--- ./shm.c	Fri Sep 17 12:47:11 1999
***************
*** 59,64 ****
--- 59,81 ----
  static int		  GFirstShm	 = 0;		/*PCPC*/
  static int		  GFdShm	    ;		/*PCPC*/
  
+ /*****************************************/
+ /*	Initialization of static variables   */
+ /*****************************************/
+ static pid_t GProcessId = 0;
+ static void init_globals(void)
+ {
+ 	pid_t pid;
+ 
+ 	if (pid=getpid(), pid != GProcessId)
+ 	{
+ 		GFirstShm = 0;
+ 		shm_rss = shm_swp = max_shmid = 0;
+ 		shm_seq = 0;
+ 		GProcessId = pid;
+ 	}
+ }
+ 
  /************************************************************************/
  /* Demande d'acces a la zone partagee de gestion des shm		*/
  /************************************************************************/
***************
*** 82,87 ****
--- 99,105 ----
  {
   int LRet ;
  
+  init_globals();
   if( GFirstShm == 0 )
   {
    if( IsGSemShmExist() )