gsql
gsql, provided by openGauss, is a database connection tool that runs in the command line. You can use gsql to connect to the server and perform operations and maintenance. In addition, gsql provides multiple Advanced Features for users.
Overview
Basic Features
-
Connect to the database: By default, only the local server can be connected. To connect to a remote database, you must configure the server. For details, see Gsql Connection and Usage.
NOTE
If gsql is used to connect to a database, the connection timeout period will be 5 minutes. If the database has not correctly set up a connection and authenticated the identity of the client within this period, gsql will time out and exit. To resolve this problem, see Troubleshooting.
-
Run SQL statements: Interactively entered SQL statements and specified SQL statements in a file can be run.
-
Run meta-commands: Meta-commands help the administrator view database object information, query cache information, format SQL output, and connect to a new database. For details about meta-commands, see Meta-Command Reference.
Advanced Features
Table 1 lists the advanced features of gsql.
Table 1 Advanced features of gsql
gsql provides a variable feature that is similar to the shell command of Linux. The following \set meta-command of gsql can be used to set a variable: \set varname value To delete the variables set by the \set command, run the following command: \unset varname NOTE:
For details about variable examples and descriptions, see Variables. |
|
Common SQL statements can be set to variables using the variable feature of gsql to simplify operations. For details about examples and descriptions about SQL substitution, see SQL substitution. |
|
Prompts of gsql can be customized. Prompts can be modified by changing the reserved three variables of gsql: PROMPT1, PROMPT2, and PROMPT3. These variables can be set to customized values or the values predefined by gsql. For details, see Prompt. |
|
According to the openGauss syntax rules, gsql supports automatic command completion by pressing Tab. This function is enabled when the --with-readline option is specified during compilation and the -r parameter is specified during client connection. For example, if you enter crea and then press Tab, gsql will change it to create. Note:
|
|
gsql can record historical client operations. This function is enabled by specifying the -r parameter when a client is connected. The number of historical records can be set using the \set command. For example, \set HISTSIZE 50 indicates that the number of historical records is set to 50. \set HISTSIZE 0 indicates that the operation history is not recorded. NOTE:
|
-
To set a variable, run the \set meta-command of gsql. For example, to set variable foo to bar, run the following command:
openGauss=# \set foo barTo reference the value of a variable, add a colon (:) before the variable. For example, to view the value of variable foo, run the following command:
openGauss=# \echo :foo barThe variable reference method is suitable for regular SQL statements and meta-commands.
gsql pre-defines some special variables and plans the values of these variables. To ensure compatibility with later versions, do not use these variables for other purposes. For details about special variables, see Table 2.
NOTE
- All the special variables consist of upper-case letters, digits, and underscores (_).
- To view the default value of a special variable, run the \echo :varname meta-command, for example, \echo :DBNAME.
Table 2 Settings of special variables
-
gsql, like a parameter of a meta-command, provides a key feature that enables you to substitute a standard SQL statement for a gsql variable. gsql also provides a new alias or identifier for the variable. To replace the value of a variable using the SQL substitution method, add a colon (:) before the variable. For example:
openGauss=# \set foo 'HR.areaS' openGauss=# select * from :foo; area_id | area_name ---------+------------------------ 4 | Middle East and Africa 3 | Asia 1 | Europe 2 | Americas (4 rows)The above command queries the HR.areaS table.
NOTICE
The value of the variable is copied literally, so it can even contain unbalanced quotation marks or backslash commands. Therefore, the input content must be meaningful.
-
The gsql prompt can be set using the three variables in Table 3. These variables consist of characters and special escape characters.
Table 3 Prompt variables
The value of the selected prompt variable is printed literally. However, a value containing a percent sign (%) is replaced by the predefined contents depending on the character following the percent sign (%). For details about the defined substitutions, see Table 4.
Table 4 Defined substitutions
Environment Variables
Table 5 Environment variables related to gsql
How to Use gsql
Prerequisites
The user using gsql must have the permission to access the database.
Background
You can use the gsql command to connect to the local database or remote database. When connecting to the remote database, enable remote connection on the server. For details, see Gsql Connection and Usage.
Procedure
-
Connect to the openGauss server using the gsql tool.
The gsql tool uses the -d parameter to specify the target database name, the -U parameter to specify the database username, the -h parameter to specify the host name, and the -p parameter to specify the port number.
NOTE
If the database name is not specified, the default database name generated during initialization will be used. If the database username is not specified, the current OS username will be used by default. If a variable does not belong to any parameter (such as -d and -U), and -d is not specified, the variable will be used as the database name. If -d is specified but -U is not specified, the variable will be used as the database username.
Example 1: Connect to the 8000 port of the local postgres database as user omm.
gsql -d postgres -p 8000Example 2: Connect to the 8000 port of the remote postgres database as user jack.
gsql -h 10.180.123.163 -d postgres -U jack -p 8000In a centralized cluster, when connecting to the primary DN, you can use commas (,) to separate the IP addresses of DNs and add them to the end of -h. gsql connects to each IP address in sequence to check whether the current DN is the primary DN. If no, gsql disconnects from the current IP address and attempts to connect to the next IP address until the primary DN is found.
gsql -h 10.180.123.163,10.180.123.164,10.180.123,165 -d postgres -U jack -p 8000Example 3: postgres and omm do not belong to any parameter, and they are used as the database name and the username, respectively.
gsql postgres omm -p 8000Equals
gsql -d postgres -U omm -p 8000For details about the gsql parameters, see Command Reference.
-
Run a SQL statement.
The following takes creating database human_staff as an example:
CREATE DATABASE human_staff; CREATE DATABASEOrdinarily, input lines end when a command-terminating semicolon is reached. If the command is sent and executed without any error, the command output is displayed on the screen.
-
Execute gsql meta-commands.
The following takes all openGauss databases and description information as an example:
openGauss=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ----------------+----------+-----------+---------+-------+----------------------- human_resource | omm | SQL_ASCII | C | C | postgres | omm | SQL_ASCII | C | C | template0 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm template1 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm human_staff | omm | SQL_ASCII | C | C | (5 rows)For details about gsql meta-commands, see Meta-Command Reference.
Example
The example shows how to spread a command over several lines of input. Note the prompt change:
openGauss=# CREATE TABLE HR.areaS(
openGauss(# area_ID NUMBER,
openGauss(# area_NAME VARCHAR2(25)
openGauss-# )tablespace EXAMPLE;
CREATE TABLE
Query the table definition:
openGauss=# \d HR.areaS
Table "hr.areas"
Column | Type | Modifiers
-----------+-----------------------+-----------
area_id | numeric | not null
area_name | character varying(25) |
Insert four lines of data into HR.areaS.
openGauss=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (1, 'Europe');
INSERT 0 1
openGauss=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (2, 'Americas');
INSERT 0 1
openGauss=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (3, 'Asia');
INSERT 0 1
openGauss=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (4, 'Middle East and Africa');
INSERT 0 1
Change the prompt.
openGauss=# \set PROMPT1 '%n@%m %~%R%#'
omm@[local] openGauss=#
Query the table:
omm@[local] openGauss=# SELECT * FROM HR.areaS;
area_id | area_name
---------+------------------------
1 | Europe
4 | Middle East and Africa
2 | Americas
3 | Asia
(4 rows)
Use the \pset command to display the table in different ways:
omm@[local] openGauss=# \pset border 2
Border style is 2.
omm@[local] openGauss=# SELECT * FROM HR.areaS;
+---------+------------------------+
| area_id | area_name |
+---------+------------------------+
| 1 | Europe |
| 2 | Americas |
| 3 | Asia |
| 4 | Middle East and Africa |
+---------+------------------------+
(4 rows)
omm@[local] openGauss=# \pset border 0
Border style is 0.
omm@[local] openGauss=# SELECT * FROM HR.areaS;
area_id area_name
------- ----------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
(4 rows)
Use the meta-command:
omm@[local] openGauss=# \a \t \x
Output format is unaligned.
Showing only tuples.
Expanded display is on.
omm@[local] openGauss=# SELECT * FROM HR.areaS;
area_id|2
area_name|Americas
area_id|1
area_name|Europe
area_id|4
area_name|Middle East and Africa
area_id|3
area_name|Asia
omm@[local] openGauss=#
Obtaining Help Information
Procedure
-
When connecting to the database, run the following command to obtain the help information:
gsql --helpThe following help information is displayed:
...... Usage: gsql [OPTION]... [DBNAME [USERNAME]] General options: -c, --command=COMMAND run only single command (SQL or internal) and exit -d, --dbname=DBNAME database name to connect to (default: "omm") -f, --file=FILENAME execute commands from file, then exit ...... -
When connecting to the database, run the following command to obtain the help information:
helpThe following help information is displayed:
You are using gsql, the command-line interface to gaussdb. Type: \copyright for distribution terms \h for help with SQL commands \? for help with gsql commands \g or terminate with semicolon to execute query \q to quit
Examples
-
Run the following command to connect to the database:
gsql -d postgres -p 8000postgres is the name of the database to be connected, and 8000 is the port number of the database primary node.
If information similar to the following is displayed, the connection succeeds:
gsql ((openGauss VxxxRxxxCxx build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. -
View the gsql help information. For details, see Table 1.
Table 1 gsql online help
Command Reference
For details about gsql parameters, see Table 1, Table 2, Table 3, and Table 4.
Table 1 Common parameters
Specifies that gsql is to run a string command and then exit. This option can be specified more than once and can be combined with the option -c in any order, the options will be proccessed according to the order. |
||
Specifies the name of the database to connect to. In addition, gsql allows you to use extended database names, that is, connection strings in the format of 'postgres[ql]://[user[:password]@][netloc][:port][, ...][/dbname][?param1=value1&...]' or '[key=value] [...]' as database names. gsql parses connection information from the connection strings and preferentially uses the information. |
||
Specifies that files are used as the command source instead of interactively-entered commands. This option can be specified more than once and can be combined with the option -c in any order, the options will be proccessed according to the order. After the files and commands are processed, gsql exits. If FILENAME is - (hyphen), then standard input is read. |
An absolute path or relative path that meets the OS path naming convention |
|
Lists all available databases and then exits. NOTE:
When this option is used together with -c/-f, only the latter option will be executed. That is to say, if -l appears as the last option, the result shows all available databases rather than the execution result of -c/-f. The opposite also applies to the condition when -c/-f appears as the last option. |
||
Sets gsql variable NAME to VALUE. For details about variable examples and descriptions, see Variables. |
||
Does not read the startup file (neither the system-wide gsqlrc file nor the user's ~/.gsqlrc file). |
||
When gsql uses the -f parameter to execute a script, START TRANSACTION/COMMIT are added to the start and end of the script, respectively, so that the script is executed as one transaction. This ensures that the script is executed successfully. If the script cannot be executed, the script is invalid. |
||
Displays help information about gsql command parameters, and exits. |
||
Table 2 Input and output parameters
Table 3 Output format parameters
Table 4 Connection parameters
Meta-Command Reference
This section describes meta-commands provided by gsql after the openGauss database CLI tool is used to connect to a database. A gsql meta-command can be anything that you enter in gsql and begins with an unquoted backslash.
Precautions
- The format of the gsql meta-command is a backslash (\) followed by a command verb, and then a parameter. The parameters are separated from the command verb and from each other by any number of whitespace characters.
- To include whitespace characters into an argument, you must quote them with a single straight quotation mark. To include a single straight quotation mark into such an argument, precede it by a backslash. Anything contained in single quotation marks is furthermore subject to C-like substitutions for \n (new line), \t (tab), \b (backspace), \r (carriage return), \f (form feed), \digits (octal), and \xdigits (hexadecimal).
- Within a parameter, text enclosed in double quotation marks ("") is taken as a command line input to the shell. The output of the command (with any trailing newline removed) is taken as the argument value.
- If an unquoted argument begins with a colon (:), the argument is taken as a gsql variable and the value of the variable is used as the argument value instead.
- Some commands take an SQL identifier (such as a table name) as a parameter. These parameters follow the SQL syntax rules: Unquoted letters are forced to lowercase, while double quotation marks ("") protect letters from case conversion and allow incorporation of whitespace into the identifier. Within double quotation marks, paired double quotation marks reduce to a single double quotation mark in the result name. For example, FOO"BAR"BAZ is interpreted as fooBARbaz, and "Aweird""name" becomes A weird"name.
- Parsing for arguments stops when another unquoted backslash is found. This is taken as the beginning of a new meta-command. The special sequence \\ (two backslashes) marks the end of parameters and continues parsing SQL statements if any. In this way, SQL and gsql commands can be freely mixed in a line. But in any case, the arguments of a meta-command cannot continue beyond the end of the line.
- In most cases the gsqlrc file won't be applied to the execution of commands the -c options specifies, except when -c options are used together with the -f options.
Meta-command
For details about meta-commands, see Table 1, Table 2, Table 3, Table 4, Table 6, Table 8, Table 9, Table 10, and Table 12.
NOTICE
FILE mentioned in the following commands indicates a file path. This path can be an absolute path such as /home/gauss/file.txt or a relative path, such as file.txt. By default, a file.txt is created in the path where the user runs gsql commands.
Table 1 Common meta-commands
Table 2 Query buffer meta-commands
Edits the function definition using an external editor. If LINE is specified, the cursor will point to the specified line of the function body. |
|
Table 3 Input/Output commands
NOTE
In Table 4, S indicates displaying the system object and + indicates displaying the additional description information of the object. PATTERN specifies the name of an object to be displayed.
Table 4 Information display meta-commands
Lists all tables, views, and sequences of all schemas in the search_path. When objects with the same name exist in different schemas in search_path, only the object in the schema that ranks first in search_path is displayed. |
Lists all tables, views, and sequences of all schemas in the search_path. openGauss=# \d |
||
Lists the structure of specified tables, views, and indexes. |
Lists the structure of table a. openGauss=# \dtable+ a |
||
If PATTERN is specified, only tables, views, and indexes whose names match PATTERN are displayed. |
Lists all tables, views, and indexes whose names start with f. openGauss=# \d+ f* |
||
Lists all available aggregate functions, together with the data type they perform operations on and the return value types. |
If PATTERN is specified, only aggregate functions whose names match PATTERN are displayed. |
Lists all available aggregate functions whose names start with f, together with their return value types and the data types. openGauss=# \da f* |
|
If PATTERN is specified, only tablespaces whose names match PATTERN are displayed. |
Lists all available tablespaces whose names start with p. openGauss=# \db p* |
||
Lists all available conversions between character-set encodings. |
If PATTERN is specified, only conversions whose names match PATTERN are displayed. |
Lists all available conversions between character-set encodings. openGauss=# \dc * |
|
Lists all available type conversions. PATTERN must be the actual type name and cannot be an alias. |
If PATTERN is specified, only conversions whose names match PATTERN are displayed. |
Lists all type conversions whose patten names start with c. openGauss=# \dC c* |
|
If PATTERN is not specified, all visible objects are displayed. The objects include aggregations, functions, operators, types, relations (tables, views, indexes, sequences, and large objects), and rules. |
openGauss=# \dd |
||
If PATTERN is specified, only permissions whose names match PATTERN are displayed. |
Lists all default permissions. openGauss=# \ddp |
||
If PATTERN is specified, only domains whose names match PATTERN are displayed. |
openGauss=# \dD |
||
If PATTERN is specified, only objects whose names match PATTERN are displayed. |
Lists all Data Source objects. openGauss=# \ded |
||
If PATTERN is specified, only tables whose names match PATTERN are displayed. |
openGauss=# \det |
||
If PATTERN is specified, only servers whose names match PATTERN are displayed. |
openGauss=# \des |
||
If PATTERN is specified, only information whose name matches PATTERN is displayed. |
openGauss=#\deu |
||
If PATTERN is specified, only data whose name matches PATTERN is displayed. |
Lists all encapsulated external data. openGauss=# \dew |
||
Lists all available functions, together with their parameters and return types. a indicates an aggregate function, n indicates a common function, t indicates a trigger, and w indicates a window function. |
If PATTERN is specified, only functions whose names match PATTERN are displayed. |
Lists all available functions, together with their parameters and return types. openGauss=# \df |
|
If PATTERN is specified, only configurations whose names match PATTERN are displayed. |
Lists all text search configuration information. openGauss=# \dF+ |
||
If PATTERN is specified, only dictionaries whose names match PATTERN are displayed. |
Lists all text search dictionaries. openGauss=# \dFd |
||
If PATTERN is specified, only analyzers whose names match PATTERN are displayed. |
Lists all text search analyzers. openGauss=# \dFp |
||
If PATTERN is specified, only templates whose names match PATTERN are displayed. |
Lists all text search templates. openGauss=# \dFt |
||
If PATTERN is specified, only roles whose names match PATTERN are displayed. |
Lists all database roles whose names start with j and end with e. openGauss=# \dg j?e |
||
This is an alias for \lo_list, which shows a list of large objects. |
openGauss=# \dl |
||
If PATTERN is specified, only languages whose names match PATTERN are displayed. |
Lists all available program languages. openGauss=# \dL |
||
If PATTERN is specified, only materialized views whose names match PATTERN are displayed. |
openGauss=# \dm |
||
Lists all schemas (namespace). If + is added to the command, the permission and description of each schema are listed. |
If PATTERN is specified, only schemas whose names match the pattern are shown. By default, only schemas you created are displayed. |
Lists information about all schemas whose names start with d. openGauss=# \dn+ d* |
|
Lists available operators with their operand and return types. |
If PATTERN is specified, only operators whose names match PATTERN are displayed. By default, only the operators created by the user are listed. |
Lists available operators with their operand and return types. openGauss=# \do |
|
If PATTERN is specified, only rules whose names match PATTERN are displayed. By default, only user-created rules are shown. |
openGauss=# \dO |
||
Lists tables, views, and related permissions. The following result about \dp is displayed: rolename=xxxx/yyyy --Assigns permissions to a role. =xxxx/yyyy --Assigns permissions to public. xxxx indicates the assigned permissions, and yyyy indicates the roles with the assigned permissions. For details about permission descriptions, see Table 5. |
If PATTERN is specified, only tables and views whose names match the pattern are shown. |
Lists tables, views, and related permissions. openGauss=# \dp |
|
Lists all parameters that have been modified. These settings can be for roles, for databases, or for both. PATTERN1 and PATTERN2 indicate a role pattern and a database pattern, respectively. |
If PATTERN is specified, only collations rules whose names match PATTERN are displayed. If the default value is used or * is specified, all settings are listed. |
Lists all modified configuration parameters of the postgres database. openGauss=# \drds *openGausss |
|
If PATTERN is specified, only types whose names match PATTERN are displayed. |
openGauss=# \dT |
||
If PATTERN is specified, only roles whose names match PATTERN are displayed. |
openGauss=# \du |
||
In this group of commands, the letters E, i, s, t, and v stand for foreign table, index, sequence, table, and view, respectively. You can specify any or a combination of these letters sequenced in any order to obtain an object list. For example, \dit lists all indexes and tables. If + is added to the end of a command name, the physical size and related description of each object are also listed. |
If PATTERN is specified, only objects whose names match PATTERN are displayed. By default, only objects you created are displayed. You can specify PATTERN or S to view other system objects. |
openGauss=# \div |
|
If PATTERN is specified, only extensions whose names match PATTERN are displayed. |
openGauss=# \dx |
||
Lists the names, owners, character set encodings, and permissions of all the databases in the server. |
List the names, owners, character set encodings, and permissions of all the databases in the server. openGauss=# \l |
||
Assume a function function_a and a function func()name. This parameter will be as follows: openGauss=# \sf function_a openGauss=# \sf "func()name"(argtype1, argtype2) |
|||
Lists all tables, views, and sequences in the database and their access permissions. |
If a pattern is given, it is a regular expression, and only matched tables, views, and sequences are shown. |
Lists all tables, views, and sequences in the database and their access permissions. openGauss=# \z |
Table 5 Description of permissions
Table 6 Formatting meta-commands
Switches between aligned and unaligned table output formats. |
|
Sets the title of any table being printed as the result of a query or unsets any such title. |
|
|
|
Sets options affecting the output of query result tables. For details about the value of NAME, see Table 7. |
|
Switches the display of output name information and row count footer. |
|
Specifies attributes to be placed within the table tag in HTML output format. If this parameter is empty, no attribute is specified. |
|
Table 7 Adjustable printing options
Table 8 Connection meta-commands
Table 9 OS meta-commands
Table 10 Variable meta-commands
Sets the NAME internal variable to VALUE. If more than one value is provided, NAME is set to the concatenation of all of them. If no second argument is given, the variable is just set with no value. Some common variables are processed differently in gsql and they are combinations of uppercase letters, numbers and underscores. Table 11 describes a list of variables that are processed in a way different from other variables. |
|
Automatically map the single-row result returned by the query to current session variables based on the column names, with variable names is same with the column name. It is not possible to assign values to special control variables with hook functions such as 'AUTOCOMMIT', 'FETCH_COUNT', and 'QUIET'. It is also not possible to assign values to variables that do not conform to naming rules, such as ';b' and '?col'. |
|
Automatically map the single-row result returned by the query to current session variables based on the column names, with variable names consisting of the prefix followed by the column name. It is not possible to assign values to special control variables with hook functions such as 'AUTOCOMMIT', 'FETCH_COUNT', and 'QUIET'. It is also not possible to assign values to variables that do not conform to naming rules, such as ';b' and '?col'. |
Table 11 Common \set commands
Table 12 Large object meta-commands
PATTERN
The various \d commands accept a PATTERN parameter to specify the object name to be displayed. In the simplest case, PATTERN is the exact name of the object. Characters in PATTERN are usually converted to lowercase (as in SQL names), for example, \dt FOO will display a table named foo. As in SQL names, placing double quotation marks (") around a pattern prevents them being folded to lower case. If you need to include a double quotation mark (") in a pattern, write it as a pair of double quotation marks ("") within a double-quote sequence, which is in accordance with the rules for SQL quoted identifiers. For example, \dt "FOO""BAR" will be displayed as a table named FOO"BAR instead of foo"bar. You cannot put double quotation marks around just part of a pattern, which is different from the normal rules for SQL names. For example, \dt FOO"FOO"BAR will be displayed as a table named fooFOObar if just part of a pattern is quoted.
Whenever the PATTERN parameter is omitted completely, the \dcommands display all objects that are visible in the current schema search path, which is equivalent to using an asterisk (*) as the pattern. An object is regarded to be visible if it can be referenced by name without explicit schema qualification. To see all objects in the database regardless of their visibility, use a dot within double quotation marks (*.*) as the pattern.
Within a pattern, the asterisk (*) matches any sequence of characters (including no characters) and a question mark (?) matches any single character. This notation is comparable to Unix shell file name patterns. For example, \dt int* displays tables whose names start with int. But within double quotation marks, the asterisk (*) and the question mark (?) lose these special meanings and are just matched literally.
A pattern that contains a dot (.) is interpreted as a schema name pattern followed by an object name pattern. For example, \dt foo*.*bar* displays all tables (whose names include bar) in schemas starting with foo. If no dot appears, then the pattern matches only visible objects in the current schema search path. Likewise, the dot within double quotation marks loses its special meaning and becomes an ordinary character.
Senior users can use regular-expression notations, such as character classes. For example [0-9] can be used to match any digit. All regular-expression special characters work as specified in POSIX. The following characters are excluded:
- A dot (.) is used as a separator.
- An asterisk (*) is translated into an asterisk prefixed with a dot (.*), which is a regular-expression marking.
- A question mark (?) is translated into a dot (.).
- A dollar sign ($) is matched literally.
You can write ?, (R+|), (R|), and R to the following pattern characters: ., R*, and R?. The dollar sign ($) does not need to be used as a regular expression character because PATTERN must match the entire name instead of being interpreted as a regular expression (in other words, $ is automatically appended to PATTERN). If you do not expect a pattern to be anchored, write an asterisk (*) at its beginning or end. All regular-expression special characters within double quotation marks lose their special meanings and are matched literally. Regular-expression special characters in operator name patterns (such as the \do parameter) are also matched literally.
Troubleshooting
Low Connection Performance
-
log_hostname is enabled, but DNS is incorrect.
Connect to the database, and run show log_hostname to check whether log_hostname is enabled in the database.
If it is enabled, the database kernel will use DNS to check the name of the host where the client is deployed. If the host where the database is configured with an incorrect or unreachable DNS server, the database connection will take a long time to set up. For details about this parameter, see the description of log_hostname in section Log Content.
-
The database kernel slowly runs the initialization statement.
Problems are difficult to locate in this scenario. Try using the strace Linux trace command.
strace gsql -U MyUserName -d postgres -h 127.0.0.1 -p 23508 -r -c '\q' Password for MyUserName:The database connection process will be printed on the screen. If the following statement takes a long time to run:
sendto(3, "Q\0\0\0\25SELECT VERSION()\0", 22, MSG_NOSIGNAL, NULL, 0) = 22 poll([{fd=3, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=3, revents=POLLIN}])It indicates that the SELECT VERSION() statement was run slowly.
After the database is connected, you can run the explain performance select version() statement to find the reason why the initialization statement was run slowly. For more information, see SQL Execution Plan.
An uncommon scenario is that the disk of the machine where the DN resides is full or faulty, affecting queries and leading to user authentication failures. As a result, the connection process is suspended. To solve this problem, simply clear the data disk space of the DN.
-
TCP connection is set up slowly.
Adapt the steps of troubleshooting slow initialization statement execution. Use strace. If the following statement is run slowly:
connect(3, {sa_family=AF_FILE, path="/home/test/tmp/gaussdb_llt1/.s.PGSQL.61052"}, 110) = 0Or,
connect(3, {sa_family=AF_INET, sin_port=htons(61052), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)It indicates that the physical connection between the client and the database is set up slowly. In this case, check whether the network is unstable or has high throughput.
Problems in Setting Up Connections
-
gsql: could not connect to server: No route to host
This problem occurs generally because an unreachable IP address or port number was specified. Check whether the values of -h and -p parameters are correct.
-
gsql: FATAL: Invalid username/password,login denied.
This problem occurs generally because an incorrect username or password was entered. Contact the database administrator to check whether the username and password are correct.
-
gsql: FATAL: Forbid remote connection with trust method!
For security purposes, remote login in trust mode is forbidden. In this case, you need to modify the connection authentication information in the pg_hba.conf file. For details, see Configuration File Reference.
NOTE
Do not modify the configurations of database hosts in the pg_hba. conf file. Otherwise, the database may become faulty. It is recommended that service applications be deployed outside the database instead of inside the database.
-
The DN can connect to the database if -h 127.0.0.1 is specified, and the connection will fail if -h 127.0.0.1 is removed.
Run the SQL statement show unix_socket_directory to check whether the unix socket directory used by the DN is the same as that specified by the environment virable $PGHOST in the shell directory.
If they are different, set $PGHOST to the directory specified by unix_socket_directory.
For more information about unix_socket_directory, see Connection Settings.
-
The "libpq.so" loaded mismatch the version of gsql, please check it.
This problem occurs because the version of libpq.so used in the environment does not match that of gsql. Run the ldd gsql command to check the version of the loaded libpq.so, and then load correct libpq.so by modifying the environment variable LD_LIBRARY_PATH.
-
gsql: symbol lookup error: xxx/gsql: undefined symbol: libpqVersionString
This problem occurs because the version of libpq.so used in the environment does not match that of gsql (or the PostgreSQL libpq.so exists in the environment). Run the ldd gsql command to check the version of the loaded libpq.so, and then load correct libpq.so by modifying the environment variable LD_LIBRARY_PATH.
-
gsql: connect to server failed: Connection timed out
Is the server running on host "xx.xxx.xxx.xxx" and accepting TCP/IP connections on port xxxx?
This problem is caused by network connection faults. Check the network connection between the client and the database server. If you cannot ping from the client to the database server, the network connection is abnormal. Contact network management personnel for troubleshooting.
ping -c 4 10.10.10.1 PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data. From 10.10.10.1: icmp_seq=2 Destination Host Unreachable From 10.10.10.1 icmp_seq=2 Destination Host Unreachable From 10.10.10.1 icmp_seq=3 Destination Host Unreachable From 10.10.10.1 icmp_seq=4 Destination Host Unreachable --- 10.10.10.1 ping statistics --- 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999ms -
gsql: FATAL: permission denied for database "postgres"
DETAIL: User does not have CONNECT privilege.
This problem occurs because the user does not have the permission to access the database. To solve this problem, perform the following steps:
-
Connect to the database as the system administrator dbadmin.
gsql -d postgres -U dbadmin -p 8000 -
Grant the user with the permission to access the database.
GRANT CONNECT ON DATABASE postgres TO user1;
NOTE
Actually, some common misoperations may also cause a database connection failure, for example, entering an incorrect database name, username, or password. In this case, the client tool will display the corresponding error messages.
-
gsql -d postgres -p 8000 gsql: FATAL: database "postgres" does not exist gsql -d postgres -U user1 -p 8000 Password for user user1: gsql: FATAL: Invalid username/password, login denied.
-
gsql: FATAL: sorry, too many clients already, active/non-active: 197/3.
This problem occurs because the number of system connections exceeds the allowed maximum. Contact the DBA database administrator to release unnecessary sessions.
You can check the number of connections as described in Table 1.
You can view the session status in the PG_STAT_ACTIVITY view. To release unnecessary sessions, use the pg_terminate_backend function.
select datid,pid,state from pg_stat_activity;datid | pid | state -------+-----------------+-------- 13205 | 139834762094352 | active 13205 | 139834759993104 | idle (2 rows)The value of pid is the thread ID of the session. Terminate the session using its thread ID.
SELECT PG_TERMINATE_BACKEND(139834759993104);If a command output similar to the following is displayed, the session is successfully terminated.
PG_TERMINATE_BACKEND ---------------------- t (1 row)Table 1 Viewing the number of session connections
-
gsql: wait xxx.xxx.xxx.xxx:xxxx timeout expired
When gsql initiates a connection request to the database, a 5-minute timeout period is used. If the database cannot correctly authenticate the client request and client identity within this period, gsql will exit the connection process for the current session, and will report the above error.
Generally, this problem is caused by the incorrect host and port (that is, the xxx part in the error information) specified by the -h and -p parameters. As a result, the communication fails. Occasionally, this problem is caused by network faults. To resolve this problem, check whether the host name and port number of the database are correct.
-
gsql: could not receive data from server: Connection reset by peer.
Check whether DN logs contain information similar to "FATAL: cipher file "/data/coordinator/server.key.cipher" has group or world access". This error is usually caused by incorrect tampering with the permissions for data directories or some key files. For details about how to correct the permissions, see related permissions for files on other normal instances.
-
gsql: FATAL: GSS authentication method is not allowed because XXXX user password is not disabled.
-
In pg_hba.conf of the target DN, the authentication mode is set to gss for authenticating the IP address of the current client. However, this authentication algorithm cannot authenticate clients. Change the authentication algorithm to sha256 and try again. For details, see Configuration File Reference.
NOTE
- Do not modify the configurations of database hosts in the pg_hba. conf file. Otherwise, the database may become faulty.
- It is recommended that service applications be deployed outside the database instead of inside the database.
Other Faults
-
There is a core dump or abnormal exit due to the bus error.
Generally, this problem is caused by changes in loading the shared dynamic library (.so file in Linux) during process running. Alternatively, if the process binary file changes, the execution code for the OS to load machines or the entry for loading a dependent library will change accordingly. In this case, the OS kills the process for protection purposes, generating a core dump file.
To resolve this problem, try again. In addition, do not run service programs in a database during O&M operations, such as an upgrade, preventing such a problem caused by file replacement during the upgrade.
NOTE
A possible stack of the core dump file contains dl_main and its function calling. The file is used by the OS to initialize a process and load the shared dynamic library. If the process has been initialized but the shared dynamic library has not been loaded, the process cannot be considered completely started.