From 6e59122490a3d4f0af0c22e89f949d517b46f5ee Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 12 Sep 2003 22:17:24 +0000 Subject: [PATCH] Update obsolete examples of error messages; various other minor editing. --- doc/src/sgml/advanced.sgml | 5 +- doc/src/sgml/catalogs.sgml | 8 +-- doc/src/sgml/client-auth.sgml | 16 +++--- doc/src/sgml/datatype.sgml | 4 +- doc/src/sgml/ddl.sgml | 8 +-- doc/src/sgml/docguide.sgml | 12 +++-- doc/src/sgml/func.sgml | 91 +++++++++++++++++++++-------------- doc/src/sgml/info.sgml | 4 +- doc/src/sgml/maintenance.sgml | 26 +++------- doc/src/sgml/mvcc.sgml | 4 +- doc/src/sgml/notation.sgml | 4 +- doc/src/sgml/plpgsql.sgml | 33 ++++++------- doc/src/sgml/plpython.sgml | 4 +- doc/src/sgml/postgres.sgml | 6 +-- doc/src/sgml/queries.sgml | 18 ++++++- doc/src/sgml/regress.sgml | 13 ++--- doc/src/sgml/runtime.sgml | 38 ++++++++------- doc/src/sgml/start.sgml | 11 ++--- doc/src/sgml/typeconv.sgml | 9 ++-- doc/src/sgml/xfunc.sgml | 11 ++++- 20 files changed, 181 insertions(+), 144 deletions(-) diff --git a/doc/src/sgml/advanced.sgml b/doc/src/sgml/advanced.sgml index c26e15b6f0..98d8803a4c 100644 --- a/doc/src/sgml/advanced.sgml +++ b/doc/src/sgml/advanced.sgml @@ -1,5 +1,5 @@ @@ -123,7 +123,8 @@ INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28'); -ERROR: <unnamed> referential integrity violation - key referenced from weather not found in cities +ERROR: insert or update on "weather" violates foreign key constraint "$1" +DETAIL: Key (city)=(Berkeley) is not present in "cities". diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 777bdd9291..f918e6f1bf 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1,6 +1,6 @@ @@ -622,7 +622,7 @@ adnum int2 - pg_attribute.attnum + pg_attribute.attnum The number of the column @@ -1650,7 +1650,7 @@ refclassid oid - pg_class.oid + pg_class.oid The OID of the system catalog the referenced object is in @@ -3579,7 +3579,7 @@ typbasetype oid - pg_type.oid + pg_type.oid If this is a derived type (see typtype), then typbasetype identifies diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 481957e4ee..23d90e9d4f 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -1,5 +1,5 @@ @@ -130,7 +130,7 @@ hostnossl database user - To be able make use of this option the server must be built + To make use of this option the server must be built with SSL support enabled. Furthermore, SSL must be enabled by enabling the ssl configuration parameter (see for more information). @@ -901,7 +901,7 @@ omicron bryanh guest1 -No pg_hba.conf entry for host 123.123.123.123, user andym, database testdb +FATAL: no pg_hba.conf entry for host "123.123.123.123", user "andym", database "testdb" This is what you are most likely to get if you succeed in contacting the server, but it does not want to talk to you. As the message @@ -912,7 +912,7 @@ No pg_hba.conf entry for host 123.123.123.123, user andym, database testdb -Password authentication failed for user 'andym' +FATAL: Password authentication failed for user "andym" Messages like this indicate that you contacted the server, and it is willing to talk to you, but not until you pass the authorization @@ -924,25 +924,27 @@ Password authentication failed for user 'andym' -FATAL 1: user "andym" does not exist +FATAL: user "andym" does not exist The indicated user name was not found. -FATAL 1: Database "testdb" does not exist in the system catalog. +FATAL: database "testdb" does not exist The database you are trying to connect to does not exist. Note that if you do not specify a database name, it defaults to the database user name, which may or may not be the right thing. + - Note that the server log may contain more information about an + The server log may contain more information about an authentication failure than is reported to the client. If you are confused about the reason for a failure, check the log. + diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index cb399f5ee8..5a5cb6af79 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1,5 +1,5 @@ @@ -2821,7 +2821,7 @@ CREATE TABLE test (a BIT(3), b BIT VARYING(5)); INSERT INTO test VALUES (B'101', B'00'); INSERT INTO test VALUES (B'10', B'101'); -ERROR: Bit string length 2 does not match type BIT(3) +ERROR: bit string length 2 does not match type bit(3) INSERT INTO test VALUES (B'10'::bit(3), B'101'); SELECT * FROM test; diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 551ca05e9a..4b15809993 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -1,4 +1,4 @@ - + Data Definition @@ -1939,8 +1939,8 @@ REVOKE CREATE ON SCHEMA public FROM PUBLIC; DROP TABLE products; NOTICE: constraint $1 on table orders depends on table products -ERROR: Cannot drop table products because other objects depend on it - Use DROP ... CASCADE to drop the dependent objects too +ERROR: cannot drop table products because other objects depend on it +HINT: Use DROP ... CASCADE to drop the dependent objects too. The error message contains a useful hint: if you do not want to bother deleting all the dependent objects individually, you can run @@ -1958,7 +1958,7 @@ DROP TABLE products CASCADE; specifying CASCADE. Of course, the nature of the possible dependencies varies with the type of the object. You can also write RESTRICT instead of - CASCADE to get the default behavior which is to + CASCADE to get the default behavior, which is to prevent drops of objects that other objects depend on. diff --git a/doc/src/sgml/docguide.sgml b/doc/src/sgml/docguide.sgml index 892a8ac72a..6dd0d233a8 100644 --- a/doc/src/sgml/docguide.sgml +++ b/doc/src/sgml/docguide.sgml @@ -1,4 +1,4 @@ - + Documentation @@ -30,8 +30,8 @@ - Additionally, a number of plain-text README-type files can be found - throughout the PostgreSQL source tree, + Additionally, a number of plain-text README files can + be found throughout the PostgreSQL source tree, documenting various implementation issues. @@ -1244,10 +1244,12 @@ End: Reference pages describing SQL commands should contain the following sections: Name, Synopsis, Description, Parameters, - Usage, Diagnostics, Notes, Examples, Compatibility, History, See + Outputs, Notes, Examples, Compatibility, History, See Also. The Parameters section is like the Options section, but there is more freedom about which clauses of the command can be - listed. The Compatibility section should explain to what extent + listed. The Outputs section is only needed if the command returns + something other than a default command-completion tag. The Compatibility + section should explain to what extent this command conforms to the SQL standard(s), or to which other database system it is compatible. The See Also section of SQL commands should list SQL commands before cross-references to diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index f2818eb0c8..617f51f095 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,5 +1,5 @@ @@ -3890,8 +3890,8 @@ substring('foobar' from 'o(.)b') o - Warning. to_char(interval, text) - is deprecated and should not be used in newly-written code. Will be removed in the next version. + Warning: to_char(interval, text) + is deprecated and should not be used in newly-written code. It will be removed in the next version. @@ -6402,7 +6402,16 @@ SELECT a, 2 | two 3 | other - + + + + A CASE expression does not evaluate any subexpressions + that are not needed to determine the result. For example, this is a + possible way of avoiding a division-by-zero failure: + +SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; + + @@ -6418,13 +6427,21 @@ SELECT a, The COALESCE function returns the first of its - arguments that is not null. This is often useful to substitute a + arguments that is not null. Null is returned only if all arguments + are null. This is often useful to substitute a default value for null values when data is retrieved for display, for example: SELECT COALESCE(description, short_description, '(none)') ... + + + Like a CASE expression, COALESCE will + not evaluate arguments that are not needed to determine the result; + that is, arguments to the right of the first non-null argument are + not evaluated. + @@ -7277,6 +7294,21 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); + + array_cat + (anyarray, anyarray) + + + anyarray + + concatenate two arrays, returning NULL + for NULL inputs + + array_cat(ARRAY[1,2,3], ARRAY[4,5]) + {1,2,3,4,5} + + + array_append (anyarray, anyelement) @@ -7293,17 +7325,17 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); - array_cat - (anyarray, anyarray) + array_prepend + (anyelement, anyarray) anyarray - concatenate two arrays, returning NULL - for NULL inputs + append an element to the beginning of an array, returning + NULL for NULL inputs - array_cat(ARRAY[1,2,3], ARRAY[4,5,6]) - {1,2,3,4,5,6} + array_prepend(1, ARRAY[2,3]) + {1,2,3} @@ -7317,7 +7349,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); returns a text representation of array dimension lower and upper bounds, generating an ERROR for NULL inputs - array_dims(array[[1,2,3],[4,5,6]]) + array_dims(array[[1,2,3], [4,5,6]]) [1:2][1:3] @@ -7338,17 +7370,17 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); - array_prepend - (anyelement, anyarray) + array_upper + (anyarray, integer) - anyarray + integer - append an element to the beginning of an array, returning + returns upper bound of the requested array dimension, returning NULL for NULL inputs - array_prepend(1, ARRAY[2,3]) - {1,2,3} + array_upper(ARRAY[1,2,3,4], 1) + 4 @@ -7362,23 +7394,8 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); concatenates array elements using provided delimiter, returning NULL for NULL inputs - array_to_string(array[1.1,2.2,3.3]::numeric(4,2)[],'~^~') - 1.10~^~2.20~^~3.30 - - - - - array_upper - (anyarray, integer) - - - integer - - returns upper bound of the requested array dimension, returning - NULL for NULL inputs - - array_upper(array_append(ARRAY[1,2,3], 4), 1) - 4 + array_to_string(array[1, 2, 3], '~^~') + 1~^~2~^~3 @@ -7392,8 +7409,8 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); splits string into array elements using provided delimiter, returning NULL for NULL inputs - string_to_array('1.10~^~2.20~^~3.30','~^~')::float8[] - {1.1,2.2,3.3} + string_to_array( 'xx~^~yy~^~zz', '~^~') + {xx,yy,zz} diff --git a/doc/src/sgml/info.sgml b/doc/src/sgml/info.sgml index 73e1d854d8..0422d9b371 100644 --- a/doc/src/sgml/info.sgml +++ b/doc/src/sgml/info.sgml @@ -1,5 +1,5 @@ @@ -24,7 +24,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.19 2003/09/08 23:02:28 petere READMEs - README files are available for some + README files are available for most contributed packages. diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index dfa2e259ff..1affca872a 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -1,5 +1,5 @@ @@ -347,9 +347,8 @@ SELECT datname, age(datfrozenxid) FROM pg_database; play=# VACUUM; -WARNING: Some databases have not been vacuumed in 1613770184 transactions. - Better vacuum them within 533713463 transactions, - or you may have a wraparound failure. +WARNING: some databases have not been vacuumed in 1613770184 transactions +HINT: Better vacuum them within 533713463 transactions, or you may have a wraparound failure. VACUUM @@ -387,20 +386,11 @@ VACUUM - PostgreSQL is unable to reuse B-tree index - pages in certain cases. The problem is that if indexed rows are - deleted, those index pages can only be reused by rows with similar - values. For example, if indexed rows are deleted and newly - inserted/updated rows have much higher values, the new rows can't use - the index space made available by the deleted rows. Instead, such - new rows must be placed on new index pages. In such cases, disk - space used by the index will grow indefinitely, even if - VACUUM is run frequently. - - - As a solution, you can use the REINDEX command - periodically to discard pages used by deleted rows. There is also - contrib/reindexdb which can reindex an entire database. + In some situations it is worthwhile to rebuild indexes periodically + with the REINDEX command. (There is also + contrib/reindexdb which can reindex an entire database.) + However, PostgreSQL 7.4 has substantially reduced the need + for this activity compared to earlier releases. diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index 12833a36e3..b74d03804c 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.sgml @@ -1,5 +1,5 @@ @@ -344,7 +344,7 @@ COMMIT; then the serializable transaction will be rolled back with the message -ERROR: Can't serialize access due to concurrent update +ERROR: could not serialize access due to concurrent update because a serializable transaction cannot modify rows changed by diff --git a/doc/src/sgml/notation.sgml b/doc/src/sgml/notation.sgml index dff64bca10..4b44be8362 100644 --- a/doc/src/sgml/notation.sgml +++ b/doc/src/sgml/notation.sgml @@ -1,5 +1,5 @@ @@ -41,7 +41,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/notation.sgml,v 1.24 2003/09/08 23:17:15 tg in charge of installing and running the server. A user could be anyone who is using, or wants to use, any part of the PostgreSQL system. These terms should not - be interpreted too narrowly; this documentation set does not have fixed + be interpreted too narrowly; this book does not have fixed presumptions about system administration procedures. diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index 99966c1d1e..d665b8986d 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -1,5 +1,5 @@ @@ -2047,14 +2047,14 @@ COMMIT; RAISE level 'format' , variable , ...; - Possible levels are DEBUG (write the message to - the server log), LOG (write the message to the - server log with a higher priority), INFO, - NOTICE and WARNING (write - the message to the server log and send it to the client, with - respectively higher priorities), and EXCEPTION - (raise an error and abort the current transaction). Whether - messages of a particular priority are reported to the client, + Possible levels are DEBUG, + LOG, INFO, + NOTICE, WARNING, + and EXCEPTION. + EXCEPTION raises an error and aborts the current + transaction; the other levels only generate messages of different + priority levels. + Whether messages of a particular priority are reported to the client, written to the server log, or both is controlled by the log_min_messages and client_min_messages configuration @@ -2078,14 +2078,14 @@ RAISE level ' PL/Python - Python Procedural Language @@ -63,7 +63,7 @@ def __plpython_procedure_myfunc_23456(): return args[0] - where 23456 is the OID of the function. + assuming that 23456 is the OID of the function. diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml index 9f9fa36ecd..9c2cba1b1a 100644 --- a/doc/src/sgml/postgres.sgml +++ b/doc/src/sgml/postgres.sgml @@ -1,5 +1,5 @@ - Welcome to PostgreSQL Tutorial. The + Welcome to the PostgreSQL Tutorial. The following few chapters are intended to give a simple introduction to PostgreSQL, relational database concepts, and the SQL language to those who are new to any one of these aspects. We only assume some general knowledge about how to use computers. No particular Unix or programming experience is - required. This part is mainly intended to give you a hands-on + required. This part is mainly intended to give you some hands-on experience with important aspects of the PostgreSQL system. It makes no attempt to be a complete or thorough treatment of the topics it covers. diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml index b717ad445a..2528154288 100644 --- a/doc/src/sgml/queries.sgml +++ b/doc/src/sgml/queries.sgml @@ -1,4 +1,4 @@ - + Queries @@ -981,6 +981,11 @@ SELECT a, b, c FROM ... name must also be given, as in SELECT tbl1.a, tbl2.a, tbl1.b FROM ... + + When working with multiple tables, it can also be useful to ask for + all the columns of a particular table: + +SELECT tbl1.*, tbl2.a FROM ... (See also .) @@ -1237,6 +1242,17 @@ SELECT a AS b FROM table1 ORDER BY a; smaller is defined in terms of the < operator. Similarly, descending order is determined with the > operator. + + + Actually, PostgreSQL uses the default btree + operator class for the column's datatype to determine the sort + ordering for ASC and DESC. Conventionally, + datatypes will be set up so that the < and + > operators correspond to this sort ordering, + but a user-defined datatype's designer could choose to do something + different. + + diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml index d6b0de87f1..768f0cf6ea 100644 --- a/doc/src/sgml/regress.sgml +++ b/doc/src/sgml/regress.sgml @@ -1,4 +1,4 @@ - + Regression Tests @@ -392,13 +392,14 @@ testname/platformpattern=comparisonfilename Therefore, we provide a variant comparison file, horology-no-DST-before-1970.out, which includes the results to be expected on these systems. To silence the bogus - failure message on HPPA platforms, resultmap - includes + failure message on HPUX platforms, + resultmap includes -horology/hppa=horology-no-DST-before-1970 +horology/.*-hpux=horology-no-DST-before-1970 - which will trigger on any machine for which the output of config.guess - begins with hppa. Other lines + which will trigger on any machine for which the output of + config.guess includes -hpux. + Other lines in resultmap select the variant comparison file for other platforms where it's appropriate. diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index fa222c1a06..853126c981 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -1,5 +1,5 @@ @@ -322,9 +322,9 @@ su - postgres -c "/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgs -FATAL: StreamServerPort: bind() failed: Address already in use - Is another postmaster already running on port 5432? - If not, wait a few seconds an retry. +LOG: could not bind IPv4 socket: Address already in use +HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry. +FATAL: could not create TCP/IP listen socket This usually means just what it suggests: you tried to start another postmaster on the same port where one is already running. @@ -334,35 +334,36 @@ FATAL: StreamServerPort: bind() failed: Address already in use on a reserved port number may draw something like: $ postmaster -i -p 666 -FATAL: StreamServerPort: bind() failed: Permission denied - Is another postmaster already running on port 666? - If not, wait a few seconds an retry. +LOG: could not bind IPv4 socket: Permission denied +HINT: Is another postmaster already running on port 666? If not, wait a few seconds and retry. +FATAL: could not create TCP/IP listen socket A message like -IpcMemoryCreate: shmget(key=5440001, size=83918612, 01600) failed: Invalid argument -FATAL 1: ShmemCreate: cannot create region +FATAL: could not create shared memory segment: Invalid argument +DETAIL: Failed syscall was shmget(key=5440001, size=4011376640, 03600). probably means your kernel's limit on the size of shared memory is - smaller than the buffer area PostgreSQL - is trying to create (83918612 bytes in this example). Or it could + smaller than the work area PostgreSQL + is trying to create (4011376640 bytes in this example). Or it could mean that you do not have System-V-style shared memory support configured into your kernel at all. As a temporary workaround, you can try starting the server with a smaller-than-normal number of buffers ( switch). You will eventually want to reconfigure your kernel to increase the allowed shared memory size. You may also see this message when trying to start multiple - servers on the same machine if their total space requested + servers on the same machine, if their total space requested exceeds the kernel limit. An error like -IpcSemaphoreCreate: semget(key=5440026, num=16, 01600) failed: No space left on device +FATAL: could not create semaphores: No space left on device +DETAIL: Failed syscall was semget(5440126, 17, 03600). does not mean you've run out of disk space. It means your kernel's limit on the number of psql: could not connect to server: Connection refused - Is the server running on host server.joe.com and accepting + Is the server running on host "server.joe.com" and accepting TCP/IP connections on port 5432? This is the generic I couldn't find a server to talk @@ -414,7 +415,7 @@ psql: could not connect to server: Connection refused Alternatively, you'll get this when attempting Unix-domain socket communication to a local server: -psql: could not connect to server: Connection refused +psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? @@ -546,7 +547,7 @@ SET ENABLE_SEQSCAN TO OFF; The virtual table pg_settings allows displaying and updating session run-time parameters. It contains one row for each configuration parameter; the columns are shown in - . This form allows the + . This table allows the configuration data to be joined with other tables and have a selection criteria applied. @@ -3381,8 +3382,9 @@ default:\ There are several ways to shut down the database server. You control - the type of shutdown by sending different signals to the server - process. + the type of shutdown by sending different signals to the + postmaster process. + SIGTERMSIGTERM diff --git a/doc/src/sgml/start.sgml b/doc/src/sgml/start.sgml index 2aafe7813e..e71fd84395 100644 --- a/doc/src/sgml/start.sgml +++ b/doc/src/sgml/start.sgml @@ -1,5 +1,5 @@ @@ -183,10 +183,10 @@ createdb: command not found Another response could be this: -psql: could not connect to server: Connection refused +createdb: could not connect to database template1: could not connect to server: +No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -createdb: database creation failed This means that the server was not started, or it was not started where createdb expected it. Again, check the @@ -197,8 +197,7 @@ createdb: database creation failed If you do not have the privileges required to create a database, you will see the following: -ERROR: CREATE DATABASE: permission denied -createdb: database creation failed +createdb: database creation failed: ERROR: permission denied to create database Not every user has authorization to create new databases. If PostgreSQL refuses to create databases @@ -358,7 +357,7 @@ mydb=# mydb=> SELECT version(); version ---------------------------------------------------------------- - PostgreSQL 7.3devel on i586-pc-linux-gnu, compiled by GCC 2.96 + PostgreSQL &version; on i586-pc-linux-gnu, compiled by GCC 2.96 (1 row) mydb=> SELECT current_date; diff --git a/doc/src/sgml/typeconv.sgml b/doc/src/sgml/typeconv.sgml index d93a91b5ed..5f723a12be 100644 --- a/doc/src/sgml/typeconv.sgml +++ b/doc/src/sgml/typeconv.sgml @@ -1,5 +1,5 @@ @@ -434,7 +434,7 @@ not some other type was used: SELECT @ '-4.5e500' AS "abs"; -ERROR: Input '-4.5e500' is out of range for float8 +ERROR: "-4.5e500" is out of range for float8 @@ -445,8 +445,9 @@ try a similar case with !, we get: SELECT '20' ! AS "factorial"; -ERROR: Unable to identify a postfix operator '!' for type 'text' - You may need to add parentheses or an explicit cast +ERROR: operator is not unique: "unknown" ! +HINT: Could not choose a best candidate operator. You may need to add explicit +typecasts. This happens because the system can't decide which of the several possible ! operators should be preferred. We can help diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml index ea446c9258..f570ce89fd 100644 --- a/doc/src/sgml/xfunc.sgml +++ b/doc/src/sgml/xfunc.sgml @@ -1,5 +1,5 @@ @@ -272,7 +272,14 @@ SELECT name, double_salary(emp) AS dream Notice the use of the syntax $1.salary to select one field of the argument row value. Also notice how the calling SELECT command uses a table name to denote - the entire current row of that table as a composite value. + the entire current row of that table as a composite value. The table + row can alternatively be referenced like this: + +SELECT name, double_salary(emp.*) AS dream + FROM emp + WHERE emp.cubicle ~= point '(2,1)'; + + which emphasizes its row nature. -- 2.40.0