]> granicus.if.org Git - postgresql/commitdiff
Hmm, absolute pathnames for the copy makes sense. I'll whip up that
authorBruce Momjian <bruce@momjian.us>
Thu, 23 Mar 2000 21:38:58 +0000 (21:38 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 23 Mar 2000 21:38:58 +0000 (21:38 +0000)
patch in a second. Should be sufficent to just make sure the first
character is a '/', right?

Ross J. Reedstrom

doc/src/sgml/ref/lock.sgml
src/backend/commands/copy.c

index da753b9bb38f92bfd695d448ed63426a00b9c960..06dc405b31c7dbc52113a074bdd8b09044c6b65b 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/lock.sgml,v 1.14 1999/10/01 15:26:29 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/lock.sgml,v 1.15 2000/03/23 21:38:57 momjian Exp $
 Postgres documentation
 -->
 
@@ -32,6 +32,70 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
    <refsect2info>
     <date>1999-06-09</date>
    </refsect2info>
+
+   <title>
+    Terms
+   </title>
+   <para>
+    <variablelist>
+     <varlistentry>
+      <term>EXCLUSIVE</term>
+      <listitem>
+       <para>
+       Exclusive lock that prevents other locks from being granted.
+       </para>
+      </listitem>
+     </varlistentry>
+    </variablelist>
+
+    <variablelist>
+     <varlistentry>
+      <term>SHARE</term>
+      <listitem>
+       <para>
+       Allows others to share lock.  Prevents EXCLUSIVE locks.
+       </para>
+      </listitem>
+     </varlistentry>
+    </variablelist>
+
+    <variablelist>
+     <varlistentry>
+      <term>ACCESS</term>
+      <listitem>
+       <para>
+       Locks table schema.
+       </para>
+      </listitem>
+     </varlistentry>
+    </variablelist>
+
+    <variablelist>
+     <varlistentry>
+      <term>ROW</term>
+      <listitem>
+       <para>
+       Locks individual rows.
+       </para>
+      </listitem>
+     </varlistentry>
+    </variablelist>
+
+    <variablelist>
+     <varlistentry>
+      <term>Notes</term>
+      <listitem>
+       <para>
+       If EXCLUSIVE or SHARE are not speicified, EXCLUSIVE is assumed.
+       If  ROW or ACCESS is not specified, the entire table is locked
+       for the duration of the transaction.
+       </para>
+      </listitem>
+     </varlistentry>
+    </variablelist>
+
+   </para>
+
    <title>
     Inputs
    </title>
@@ -53,17 +117,17 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
        <note>
        <para>
         This lock mode is acquired automatically over tables being queried.
-        <productname>Postgres</productname> releases automatically acquired
-        ACCESS SHARE locks after the statement is done.
+        This lock is released automatically after the statement completes.
+        It does not remain for the duration of the transaction.
        </para>
        </note>
 
        <para>
        This is the least restrictive lock mode which conflicts only with 
        ACCESS EXCLUSIVE mode. It is intended to protect a table being
-       queried from concurrent <command>ALTER TABLE</command>, 
+       modified by concurrent <command>ALTER TABLE</command>, 
        <command>DROP TABLE</command> and <command>VACUUM</command> 
-       statements over the same table.
+       commands.
        </para>
       </listitem>
      </varlistentry>
@@ -74,6 +138,8 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
        <note>
        <para>
         Automatically acquired by any <command>SELECT FOR UPDATE</command> statement.
+        While it is a SHARE lock, there is the intention to later upgrade
+        this to an EXCLUSIVE lock.
        </para>
        </note>
 
@@ -90,7 +156,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
        <para>
         Automatically acquired by any <command>UPDATE</command>, 
         <command>DELETE</command>, <command>INSERT</command> statement.
-       </para>
+        </para>
        </note>
 
        <para>
@@ -107,6 +173,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
        <note>
        <para>
         Automatically acquired by any <command>CREATE INDEX</command> statement.
+        Share-locks entire table.
        </para>
        </note>
 
@@ -123,10 +190,10 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
       <listitem>
 
        <para>
-       Conflicts with ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
-       EXCLUSIVE and ACCESS EXCLUSIVE modes. This mode is more
-       restrictive than SHARE mode because of only one transaction
-       at time can hold this lock.
+       This is like an EXCLUSIVE lock, but allows SHARE ROW locks
+        by others.
+        Conflicts with ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
+       EXCLUSIVE and ACCESS EXCLUSIVE modes.
        </para>
       </listitem>
      </varlistentry>
@@ -139,7 +206,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
        Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
        EXCLUSIVE and ACCESS EXCLUSIVE modes. This mode is yet more
        restrictive than that of SHARE ROW EXCLUSIVE; it blocks all concurrent
-       SELECT FOR UPDATE queries.
+       SHARE ROW/SELECT FOR UPDATE queries.
        </para>
       </listitem>
      </varlistentry>
@@ -149,7 +216,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
       <listitem>
        <note>
        <para>
-        Automatically acquired by <command>ALTER TABLE</command>, 
+        Automatically acquired by <command>ALTER TABLE</command>,
         <command>DROP TABLE</command>, <command>VACUUM</command> statements.
        </para>
        </note>
index a91072522a5319b9eb20bf0187b32e164fe8e138..8634ab11dd5913cea5a521fc4aa2e175f86c69b5 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.102 2000/03/09 05:00:23 inoue Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.103 2000/03/23 21:38:58 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -348,6 +348,11 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
                        mode_t          oumask;         /* Pre-existing umask value */
 
             oumask = umask((mode_t) 022);
+
+                       if (*filename != '/')
+                               elog(ERROR, "Relative path not allowed for server side"
+                                                       " COPY command.");
+
 #ifndef __CYGWIN32__
                        fp = AllocateFile(filename, "w");
 #else