Merge branch '21-psql-command-improvement-sylvain' into '21-psql-command'

Improve #31

See merge request odoo-openupgrade-wizard/odoo-openupgrade-wizard!38
This commit is contained in:
Rémy Taymans 2023-07-06 15:14:39 +00:00
commit a436490a68
2 changed files with 75 additions and 7 deletions

View File

@ -39,6 +39,7 @@ and provides helpers to run (and replay) migrations until it works.
* [Command ``upgrade`` (BETA)](#command-upgrade) * [Command ``upgrade`` (BETA)](#command-upgrade)
* [Command ``generate-module-analysis`` (BETA)](#command-generate-module-analysis) * [Command ``generate-module-analysis`` (BETA)](#command-generate-module-analysis)
* [Command ``estimate-workload`` (BETA)](#command-estimate-workload) * [Command ``estimate-workload`` (BETA)](#command-estimate-workload)
* [Command ``psql``](#command-psql)
<a name="installation"/> <a name="installation"/>
@ -365,3 +366,72 @@ the work to do for the migration.
renaming or merging of modules) renaming or merging of modules)
- check that the analysis and migration have been done for the official - check that the analysis and migration have been done for the official
modules present in odoo/odoo modules present in odoo/odoo
<a name="command-psql"/>
## Command: ``psql``
**Prerequites:** init
```
odoo-openupgrade-wizard psql
--database DB_NAME
--command "SQL_REQUEST"
```
Execute an SQL Request on the target database.
**Optional arguments**
* If no ``database`` is provided, default ``postgres`` database will be used. exemple:
```
odoo-openupgrade-wizard psql --command "\l";
```
Result:
```
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+-------+----------+------------+------------+-------------------
postgres | odoo | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | odoo | UTF8 | en_US.utf8 | en_US.utf8 | =c/odoo +
| | | | | odoo=CTc/odoo
template1 | odoo | UTF8 | en_US.utf8 | en_US.utf8 | =c/odoo +
| | | | | odoo=CTc/odoo
test_psql | odoo | UTF8 | en_US.utf8 | en_US.utf8 |
```
* if you execute request that return long result, you can choose to select ``pager`` or ``-no-pager``
option to display the result via the click function ``echo_via_pager``.
(see : https://click.palletsprojects.com/en/8.1.x/utils/#pager-support)
Note : Pager is enabled by default.
* you can pass extra psql arguments inline.
```
odoo-openupgrade-wizard psql
--database=test_psql
--command "select id, name from res_partner where name ilike '%admin%';"
-H
```
Result:
```
<table border="1">
<tr>
<th align="center">id</th>
<th align="center">name</th>
</tr>
<tr valign="top">
<td align="right">3</td>
<td align="left">Administrator</td>
</tr>
</table>
<p>(1 row)<br />
</p>
```
See all the options here https://www.postgresql.org/docs/current/app-psql.html

View File

@ -116,19 +116,17 @@ def execute_sql_request(ctx, request, database="postgres"):
def execute_psql_command( def execute_psql_command(
ctx, request: str, database: str = "postgres", psql_args=None ctx, request: str, database: str = None, psql_args: tuple = ()
): ):
"""Execute psql request in postgres container with psql_args on database""" """Execute psql request in postgres container with psql_args on database"""
if psql_args and not isinstance(psql_args, str):
psql_args = " ".join(psql_args)
container = get_postgres_container(ctx) container = get_postgres_container(ctx)
command = ( command = (
"psql" "psql"
" --username=odoo" " --username=odoo"
" --dbname={database}" f" --dbname={database or 'postgres'}"
' --command "{request}"' f' --command "{request}"'
" {psql_args}" f" {' '.join(psql_args)}"
).format(database=database, request=request, psql_args=psql_args) )
logger.debug( logger.debug(
"Executing the following command in postgres container\n" "Executing the following command in postgres container\n"
"%s" % (command) "%s" % (command)