Daniel Gustafsson <dan...@yesql.se> writes: >> On 30 Jan 2022, at 16:52, Tom Lane <t...@sss.pgh.pa.us> wrote: >> I could get behind documenting the more modern >> one first, though.
> +1 Proposed patch attached. >> I wonder if it's time to remove the references to PG 8.1? > I think it's time to remove references to 8.0 and 8.1 to de-clutter the page, > 8.3 or 8.4 seems like a better lower limit to keep. It's hard to explain why lo_creat is there at all without mentioning 8.1, so I ended up with the below, which basically says that lo_creat is only useful for talking to pre-8.1 servers. Comments? regards, tom lane
diff --git a/doc/src/sgml/lobj.sgml b/doc/src/sgml/lobj.sgml index 57bb57083a..b767ba1d05 100644 --- a/doc/src/sgml/lobj.sgml +++ b/doc/src/sgml/lobj.sgml @@ -138,57 +138,59 @@ <title>Creating a Large Object</title> <para> - <indexterm><primary>lo_creat</primary></indexterm> + <indexterm><primary>lo_create</primary></indexterm> The function <synopsis> -Oid lo_creat(PGconn *conn, int mode); +Oid lo_create(PGconn *conn, Oid lobjId); </synopsis> - creates a new large object. + creates a new large object. The OID to be assigned can be + specified by <replaceable class="parameter">lobjId</replaceable>; + if so, failure occurs if that OID is already in use for some large + object. If <replaceable class="parameter">lobjId</replaceable> + is <symbol>InvalidOid</symbol> (zero) then <function>lo_create</function> + assigns an unused OID. The return value is the OID that was assigned to the new large object, or <symbol>InvalidOid</symbol> (zero) on failure. - - <replaceable class="parameter">mode</replaceable> is unused and - ignored as of <productname>PostgreSQL</productname> 8.1; however, for - backward compatibility with earlier releases it is best to - set it to <symbol>INV_READ</symbol>, <symbol>INV_WRITE</symbol>, - or <symbol>INV_READ</symbol> <literal>|</literal> <symbol>INV_WRITE</symbol>. - (These symbolic constants are defined - in the header file <filename>libpq/libpq-fs.h</filename>.) </para> <para> An example: <programlisting> -inv_oid = lo_creat(conn, INV_READ|INV_WRITE); +inv_oid = lo_create(conn, desired_oid); </programlisting> </para> <para> - <indexterm><primary>lo_create</primary></indexterm> - The function + <indexterm><primary>lo_creat</primary></indexterm> + The older function <synopsis> -Oid lo_create(PGconn *conn, Oid lobjId); +Oid lo_creat(PGconn *conn, int mode); </synopsis> - also creates a new large object. The OID to be assigned can be - specified by <replaceable class="parameter">lobjId</replaceable>; - if so, failure occurs if that OID is already in use for some large - object. If <replaceable class="parameter">lobjId</replaceable> - is <symbol>InvalidOid</symbol> (zero) then <function>lo_create</function> assigns an unused - OID (this is the same behavior as <function>lo_creat</function>). + also creates a new large object, always assigning an unused OID. The return value is the OID that was assigned to the new large object, or <symbol>InvalidOid</symbol> (zero) on failure. </para> <para> - <function>lo_create</function> is new as of <productname>PostgreSQL</productname> - 8.1; if this function is run against an older server version, it will - fail and return <symbol>InvalidOid</symbol>. + In <productname>PostgreSQL</productname> releases 8.1 and later, + the <replaceable class="parameter">mode</replaceable> is ignored, + so that <function>lo_creat</function> is exactly equivalent to + <function>lo_create</function> with a zero second argument. + However, there is little reason to use <function>lo_creat</function> + unless you need to work with servers older than 8.1. + To work with such an old server, you must + use <function>lo_creat</function> not <function>lo_create</function>, + and you must set <replaceable class="parameter">mode</replaceable> to + one of <symbol>INV_READ</symbol>, <symbol>INV_WRITE</symbol>, + or <symbol>INV_READ</symbol> <literal>|</literal> <symbol>INV_WRITE</symbol>. + (These symbolic constants are defined + in the header file <filename>libpq/libpq-fs.h</filename>.) </para> <para> An example: <programlisting> -inv_oid = lo_create(conn, desired_oid); +inv_oid = lo_creat(conn, INV_READ|INV_WRITE); </programlisting> </para> </sect2>