Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6672daa

Browse files
committed
Consistently use multi-line formatting for all ACL columns printed by psql's
various display commands, not only for \z.In passing, fix some infelicities in the newly added \d commands for SQL-MEDcatalogs.Andreas Scherbaum and Tom Lane
1 parent26ce4e8 commit6672daa

File tree

2 files changed

+92
-65
lines changed

2 files changed

+92
-65
lines changed

‎src/bin/psql/describe.c

Lines changed: 60 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
1010
*
11-
* $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.190 2008/12/19 16:25:18 petere Exp $
11+
* $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.191 2008/12/31 18:07:47 tgl Exp $
1212
*/
1313
#include"postgres_fe.h"
1414

@@ -37,6 +37,7 @@ static bool listTSConfigsVerbose(const char *pattern);
3737
staticbooldescribeOneTSConfig(constchar*oid,constchar*nspname,
3838
constchar*cfgname,
3939
constchar*pnspname,constchar*prsname);
40+
staticvoidprintACLColumn(PQExpBufferbuf,constchar*colname);
4041

4142

4243
/*----------------
@@ -142,9 +143,11 @@ describeTablespaces(const char *pattern, bool verbose)
142143
gettext_noop("Location"));
143144

144145
if (verbose)
145-
appendPQExpBuffer(&buf,
146-
",\n spcacl AS \"%s\"",
147-
gettext_noop("Access privileges"));
146+
{
147+
appendPQExpBuffer(&buf,",\n ");
148+
printACLColumn(&buf,"spcacl");
149+
}
150+
148151
if (verbose&&pset.sversion >=80200)
149152
appendPQExpBuffer(&buf,
150153
",\n pg_catalog.shobj_description(oid, 'pg_tablespace') AS \"%s\"",
@@ -464,9 +467,8 @@ listAllDbs(bool verbose)
464467
" d.datctype as \"%s\",\n",
465468
gettext_noop("Collation"),
466469
gettext_noop("Ctype"));
467-
appendPQExpBuffer(&buf,
468-
" d.datacl as \"%s\"",
469-
gettext_noop("Access Privileges"));
470+
appendPQExpBuffer(&buf," ");
471+
printACLColumn(&buf,"d.datacl");
470472
if (verbose&&pset.sversion >=80200)
471473
appendPQExpBuffer(&buf,
472474
",\n CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')\n"
@@ -524,20 +526,14 @@ permissionsList(const char *pattern)
524526
printfPQExpBuffer(&buf,
525527
"SELECT n.nspname as \"%s\",\n"
526528
" c.relname as \"%s\",\n"
527-
" CASE c.relkind WHEN 'r' THEN '%s' WHEN 'v' THEN '%s' WHEN 'S' THEN '%s' END as \"%s\",\n",
529+
" CASE c.relkind WHEN 'r' THEN '%s' WHEN 'v' THEN '%s' WHEN 'S' THEN '%s' END as \"%s\",\n"
530+
" ",
528531
gettext_noop("Schema"),
529532
gettext_noop("Name"),
530533
gettext_noop("table"),gettext_noop("view"),gettext_noop("sequence"),
531534
gettext_noop("Type"));
532-
533-
if (pset.sversion >=80100)
534-
appendPQExpBuffer(&buf," pg_catalog.array_to_string(c.relacl, E'\\n') as \"%s\"\n",
535-
gettext_noop("Access privileges"));
536-
else
537-
appendPQExpBuffer(&buf," pg_catalog.array_to_string(c.relacl, '\\n') as \"%s\"\n",
538-
gettext_noop("Access privileges"));
539-
540-
appendPQExpBuffer(&buf,"FROM pg_catalog.pg_class c\n"
535+
printACLColumn(&buf,"c.relacl");
536+
appendPQExpBuffer(&buf,"\nFROM pg_catalog.pg_class c\n"
541537
" LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n"
542538
"WHERE c.relkind IN ('r', 'v', 'S')\n");
543539

@@ -2188,11 +2184,13 @@ listSchemas(const char *pattern, bool verbose)
21882184
gettext_noop("Owner"));
21892185

21902186
if (verbose)
2187+
{
2188+
appendPQExpBuffer(&buf,",\n ");
2189+
printACLColumn(&buf,"n.nspacl");
21912190
appendPQExpBuffer(&buf,
2192-
",\n n.nspacl as \"%s\","
2193-
" pg_catalog.obj_description(n.oid, 'pg_namespace') as \"%s\"",
2194-
gettext_noop("Access privileges"),
2191+
",\n pg_catalog.obj_description(n.oid, 'pg_namespace') AS \"%s\"",
21952192
gettext_noop("Description"));
2193+
}
21962194

21972195
appendPQExpBuffer(&buf,
21982196
"\nFROM pg_catalog.pg_namespace n\n"
@@ -2803,21 +2801,23 @@ listForeignDataWrappers(const char *pattern, bool verbose)
28032801
printfPQExpBuffer(&buf,
28042802
"SELECT fdwname AS \"%s\",\n"
28052803
" pg_catalog.pg_get_userbyid(fdwowner) AS \"%s\",\n"
2806-
" fdwlibrary AS \"%s\"\n",
2804+
" fdwlibrary AS \"%s\"",
28072805
gettext_noop("Name"),
28082806
gettext_noop("Owner"),
28092807
gettext_noop("Library"));
28102808

28112809
if (verbose)
2810+
{
2811+
appendPQExpBuffer(&buf,",\n ");
2812+
printACLColumn(&buf,"fdwacl");
28122813
appendPQExpBuffer(&buf,
2813-
",\n fdwacl AS \"%s\","
2814-
" fdwoptions AS \"%s\"",
2815-
gettext_noop("Access privileges"),
2814+
",\n fdwoptions AS \"%s\"",
28162815
gettext_noop("Options"));
2816+
}
28172817

2818-
appendPQExpBuffer(&buf,"\nFROM pg_catalog.pg_foreign_data_wrapper WHERE 1=1\n");
2818+
appendPQExpBuffer(&buf,"\nFROM pg_catalog.pg_foreign_data_wrapper\n");
28192819

2820-
processSQLNamePattern(pset.db,&buf,pattern,true, false,
2820+
processSQLNamePattern(pset.db,&buf,pattern,false, false,
28212821
NULL,"fdwname",NULL,NULL);
28222822

28232823
appendPQExpBuffer(&buf,"ORDER BY 1;");
@@ -2840,7 +2840,7 @@ listForeignDataWrappers(const char *pattern, bool verbose)
28402840
/*
28412841
* \des
28422842
*
2843-
* Describes servers.
2843+
* Describesforeign-dataservers.
28442844
*/
28452845
bool
28462846
listForeignServers(constchar*pattern,boolverbose)
@@ -2853,27 +2853,30 @@ listForeignServers(const char *pattern, bool verbose)
28532853
printfPQExpBuffer(&buf,
28542854
"SELECT s.srvname AS \"%s\",\n"
28552855
" pg_catalog.pg_get_userbyid(s.srvowner) AS \"%s\",\n"
2856-
" f.fdwname AS \"%s\"\n",
2856+
" f.fdwname AS \"%s\"",
28572857
gettext_noop("Name"),
28582858
gettext_noop("Owner"),
28592859
gettext_noop("Foreign-data wrapper"));
28602860

28612861
if (verbose)
2862+
{
2863+
appendPQExpBuffer(&buf,",\n ");
2864+
printACLColumn(&buf,"s.srvacl");
28622865
appendPQExpBuffer(&buf,
2863-
",\n s.srvacl AS \"%s\","
2864-
" s.srvtype AS \"%s\","
2865-
" s.srvversion AS \"%s\","
2866+
",\n"
2867+
" s.srvtype AS \"%s\",\n"
2868+
" s.srvversion AS \"%s\",\n"
28662869
" s.srvoptions AS \"%s\"",
2867-
gettext_noop("Access privileges"),
28682870
gettext_noop("Type"),
28692871
gettext_noop("Version"),
28702872
gettext_noop("Options"));
2873+
}
28712874

28722875
appendPQExpBuffer(&buf,
2873-
"\nFROM pg_foreign_server s\n"
2874-
"JOIN pg_catalog.pg_foreign_data_wrapper f ON f.oid=s.srvfdw\n");
2876+
"\nFROMpg_catalog.pg_foreign_server s\n"
2877+
"JOIN pg_catalog.pg_foreign_data_wrapper f ON f.oid=s.srvfdw\n");
28752878

2876-
processSQLNamePattern(pset.db,&buf,pattern,true, false,
2879+
processSQLNamePattern(pset.db,&buf,pattern,false, false,
28772880
NULL,"s.srvname",NULL,NULL);
28782881

28792882
appendPQExpBuffer(&buf,"ORDER BY 1;");
@@ -2917,9 +2920,9 @@ listUserMappings(const char *pattern, bool verbose)
29172920
",\n um.umoptions AS \"%s\"",
29182921
gettext_noop("Options"));
29192922

2920-
appendPQExpBuffer(&buf,"\nFROM pg_catalog.pg_user_mappings um WHERE 1=1\n");
2923+
appendPQExpBuffer(&buf,"\nFROM pg_catalog.pg_user_mappings um\n");
29212924

2922-
processSQLNamePattern(pset.db,&buf,pattern,true, false,
2925+
processSQLNamePattern(pset.db,&buf,pattern,false, false,
29232926
NULL,"um.srvname","um.usename",NULL);
29242927

29252928
appendPQExpBuffer(&buf,"ORDER BY 1, 2;");
@@ -2938,3 +2941,23 @@ listUserMappings(const char *pattern, bool verbose)
29382941
PQclear(res);
29392942
return true;
29402943
}
2944+
2945+
/*
2946+
* printACLColumn
2947+
*
2948+
* Helper function for consistently formatting ACL (privilege) columns.
2949+
* The proper targetlist entry is appended to buf. Note lack of any
2950+
* whitespace or comma decoration.
2951+
*/
2952+
staticvoid
2953+
printACLColumn(PQExpBufferbuf,constchar*colname)
2954+
{
2955+
if (pset.sversion >=80100)
2956+
appendPQExpBuffer(buf,
2957+
"pg_catalog.array_to_string(%s, E'\\n') AS \"%s\"",
2958+
colname,gettext_noop("Access privileges"));
2959+
else
2960+
appendPQExpBuffer(buf,
2961+
"pg_catalog.array_to_string(%s, '\\n') AS \"%s\"",
2962+
colname,gettext_noop("Access privileges"));
2963+
}

‎src/test/regress/expected/foreign_data.out

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -370,20 +370,22 @@ ALTER SERVER s3 OPTIONS (tnsname 'orcl', port '1521');
370370
GRANT USAGE ON FOREIGN SERVER s1 TO regress_test_role;
371371
GRANT USAGE ON FOREIGN SERVER s6 TO regress_test_role2 WITH GRANT OPTION;
372372
\des+
373-
List of foreign servers
374-
Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | Options
375-
------+-------------------+----------------------+---------------------------------------------------------------------------------+--------+---------+------------------------------
376-
S6 | foreign_data_user | foo | | | | {mixed_case_names=true}
377-
s1 | foreign_data_user | foo | {foreign_data_user=U/foreign_data_user,regress_test_role=U/foreign_data_user} | | 1.0 | {servername=s1}
378-
s2 | foreign_data_user | foo | | | 1.1 | {host=a,dbname=b}
379-
s3 | foreign_data_user | foo | | oracle | | {tnsname=orcl,port=1521}
380-
s4 | foreign_data_user | foo | | oracle | | {host=a,dbname=b}
381-
s5 | foreign_data_user | foo | | | 15.0 |
382-
s6 | foreign_data_user | foo | {foreign_data_user=U/foreign_data_user,regress_test_role2=U*/foreign_data_user} | | 16.0 | {host=a,dbname=b}
383-
s7 | foreign_data_user | foo | | oracle | 17.0 | {host=a,dbname=b}
384-
s8 | foreign_data_user | postgresql | | | | {host=localhost,dbname=s8db}
385-
st1 | regress_test_role | foo | | | |
386-
st2 | regress_test_role | foo | | | |
373+
List of foreign servers
374+
Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | Options
375+
------+-------------------+----------------------+-----------------------------------------+--------+---------+------------------------------
376+
S6 | foreign_data_user | foo | | | | {mixed_case_names=true}
377+
s1 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user | | 1.0 | {servername=s1}
378+
: regress_test_role=U/foreign_data_user
379+
s2 | foreign_data_user | foo | | | 1.1 | {host=a,dbname=b}
380+
s3 | foreign_data_user | foo | | oracle | | {tnsname=orcl,port=1521}
381+
s4 | foreign_data_user | foo | | oracle | | {host=a,dbname=b}
382+
s5 | foreign_data_user | foo | | | 15.0 |
383+
s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user | | 16.0 | {host=a,dbname=b}
384+
: regress_test_role2=U*/foreign_data_user
385+
s7 | foreign_data_user | foo | | oracle | 17.0 | {host=a,dbname=b}
386+
s8 | foreign_data_user | postgresql | | | | {host=localhost,dbname=s8db}
387+
st1 | regress_test_role | foo | | | |
388+
st2 | regress_test_role | foo | | | |
387389
(11 rows)
388390

389391
SET ROLE regress_test_role;
@@ -420,20 +422,22 @@ ERROR: role "regress_test_indirect" cannot be dropped because some objects depe
420422
DETAIL: owner of server s1
421423
access to foreign-data wrapper foo
422424
\des+
423-
List of foreign servers
424-
Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | Options
425-
------+-----------------------+----------------------+---------------------------------------------------------------------------------+--------+---------+---------------------------------
426-
S6 | foreign_data_user | foo | | | | {mixed_case_names=true}
427-
s1 | regress_test_indirect | foo | {foreign_data_user=U/foreign_data_user,regress_test_role=U/foreign_data_user} | | 1.1 | {servername=s1}
428-
s2 | foreign_data_user | foo | | | 1.1 | {host=a,dbname=b}
429-
s3 | foreign_data_user | foo | | oracle | | {tnsname=orcl,port=1521}
430-
s4 | foreign_data_user | foo | | oracle | | {host=a,dbname=b}
431-
s5 | foreign_data_user | foo | | | 15.0 |
432-
s6 | foreign_data_user | foo | {foreign_data_user=U/foreign_data_user,regress_test_role2=U*/foreign_data_user} | | 16.0 | {host=a,dbname=b}
433-
s7 | foreign_data_user | foo | | oracle | 17.0 | {host=a,dbname=b}
434-
s8 | foreign_data_user | postgresql | | | | {dbname=db1,connect_timeout=30}
435-
st1 | regress_test_role | foo | | | |
436-
st2 | regress_test_role | foo | | | |
425+
List of foreign servers
426+
Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | Options
427+
------+-----------------------+----------------------+-----------------------------------------+--------+---------+---------------------------------
428+
S6 | foreign_data_user | foo | | | | {mixed_case_names=true}
429+
s1 | regress_test_indirect | foo | foreign_data_user=U/foreign_data_user | | 1.1 | {servername=s1}
430+
: regress_test_role=U/foreign_data_user
431+
s2 | foreign_data_user | foo | | | 1.1 | {host=a,dbname=b}
432+
s3 | foreign_data_user | foo | | oracle | | {tnsname=orcl,port=1521}
433+
s4 | foreign_data_user | foo | | oracle | | {host=a,dbname=b}
434+
s5 | foreign_data_user | foo | | | 15.0 |
435+
s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user | | 16.0 | {host=a,dbname=b}
436+
: regress_test_role2=U*/foreign_data_user
437+
s7 | foreign_data_user | foo | | oracle | 17.0 | {host=a,dbname=b}
438+
s8 | foreign_data_user | postgresql | | | | {dbname=db1,connect_timeout=30}
439+
st1 | regress_test_role | foo | | | |
440+
st2 | regress_test_role | foo | | | |
437441
(11 rows)
438442

439443
-- DROP SERVER

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp