On 23.07.2024 15:53, Robert Haas wrote:
On Mon, Jul 22, 2024 at 5:19 PM Pavel Luzanov wrote:
Visible but inaccessible objects in system catalogs increase the volume
of command output unnecessarily. Why do I need to know the list of all
schemas in the database if I only have access to the
k I'm not the first one trying to bikeshedding in this area.
It's probably been discussed many times whythisshouldnotbe done.
But such thoughts do come, and I don't know the answer yet.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
hat's fine.
So the time for change has not come yet. In any case, this discussion may be
useful
in the future.Butwhoknows,maybenowwecancometosomekindof agreement.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
On 16.07.2024 16:24, Robert Haas wrote:
Which version of the patch is currently under discussion?
I believe we are talking about the latest v8 patch version. [1]
1.https://www.postgresql.org/message-id/5341835b-e7be-44dc-b6e5-400e9e3f3c64%40postgrespro.ru
--
Pavel Luzanov
Postgres
more people to chip in.
I am not against moving "Valid until" and "Connection limit" to extended mode.
It just seemed to me that without these two columns, the output of the command
is too short, so there is no reason in hiding them.
But you are right, we need more opinion
orm by placing
them on one line separated by commas.
1.https://www.postgresql.org/message-id/27f87cb9-229b-478b-81b2-157f94239d55%40postgrespro.ru
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
ill further
confuse the situation. We can probably change the column name, but still
the root of the confusion is caused by the attribute name, not the
column name. What do you think?
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
implemented usingthe followingexpression: case when
rolvaliduntil = 'infinity' or rolvaliduntil is null then
'unbounded' -- translatable value
else
rolvaliduntil::pg_catalog.text
end
Or we can hide 'infinity':
case when rolvaliduntil = 'infinity' then
null
else
rolvaliduntil
end
This is a little bit better, but I don't like both. Wewill notbe ableto
distinguishbetween nullandinfinity values inthe table. After all, I
think 'infinity' is a rare case for "Valid until". Whatis the reasonto
set'Validuntil'='infinity'ifthe passwordisunlimitedbydefault? Therefore,
my opinion here is to leave "infinity" as is, but I am open to better
alternatives.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
Issue about display of rolvaliduntil
can't be resolved without changing pg_roles (or executing different queries
for different users).
Therefore, I think the current patch offers a better version of the \du command.
However, I admit that these improvements are not enough to accept the patch.
I w
TION LIMIT -1 VALID UNTIL
'infinity';
CREATE ROLE regress_du_role2 LOGIN REPLICATION BYPASSRLS CONNECTION LIMIT 42;
CREATE ROLE regress_du_admin LOGIN SUPERUSER CREATEROLE CREATEDB BYPASSRLS
REPLICATION INHERIT;
COMMENT ON ROLE regress_du_admin IS 'some description';
--
On 16.04.2024 09:15, Pavel Luzanov wrote:
On 16.04.2024 01:06, David G. Johnston wrote:
At this point I'm on board with retaining the \dr charter of simply being
an easy way to access the detail exposed in pg_roles with some display
formatting but without any attempt to convey how the s
about pg_roles to this
commitfest entry[2].
I will return to work on the patch after my vacation.
1.https://www.postgresql.org/message-id/flat/db1d94ba-1e6e-4e86-baff-91e6e79071c1%40postgrespro.ru
2.https://commitfest.postgresql.org/48/4738/
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
g "Can" instead of "yes" to represent true.
In other psql commands, boolean values are always shown as yes/no.
NULL instead of false might be possible, but I'd rather check if this approach
has been used elsewhere. I prefer consistency everywhere.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
lay roles \drg - display role grants
But the long history of \du & \dg prevents from doing so, and creating a
third option is too excessive.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
On 17.02.2024 00:37, David G. Johnston wrote:
On Mon, Feb 12, 2024 at 2:29 PM Pavel Luzanov
wrote:
regress_du_role1 | no| Inherit | no| 2024-12-31
00:00:00+03(invalid) | 50 | Group role without password but with
valid until
regress_du_role2 | yes
|
| | Create role+| ||
| | Inherit+| ||
| | Replication+| | |
| | Bypass RLS | ||
(6 rows)
On 13.02.2024 00:29, Pavel Luzanov wrote:
The changes are split into two patches.
0001 - pg_roles view. I plan to organize a new thread for discussion.
Please see it here:
https://www.postgresql.org/message-id/db1d94ba-1e6e-4e86-baff-91e6e79071c1%40postgrespro.ru
--
Pavel Luzanov
Postgres
create role and admin
membership,
then show true/false depending on the password existence.
For other roles, show NULL.
Although it is possible that for security reasons such changes should not be
made.
1.https://www.postgresql.org/message-id/ef4d000f-6766-4ae1-9f69-0d0caa8130d6%40postgrespr
Therefore, now "\conninfo" and "\conninfo+" return the
same error when "pg_terminate_backend()" terminates this session
through another session.
This make sense to me. Thank you for this work.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
On 28.01.2024 22:51, Pavel Luzanov wrote:
I'll think about it and try to implement in the next patch version
within a few days.
Sorry for delay.
Please look at v4.
I tried to implement all of David's suggestions.
The only addition - "Login" column. I still thin
rver build.
Sorry for the noise.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
s.aircraft_code = a.aircraft_code
);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
The connection to the server was lost. Attempting reset: Failed.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port
"5401".
Another surprise is that this check:if (db == NULL) did not work in both cases.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
re changes to the documentation and
tests.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
ol verbose*)
I mean that parameter verbose is not used in the function body and
listConnectionInformation called only in verbose mode.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
ssion_user, and authenticated user,
but I can't find the appropriate sql function for PQuser.
What about to include system_user function? It shows useful authentication
details.
Also, it seems that the verbose parameter in the listConnectionInformation
is unnecessary.
--
Pavel L
On 28.01.2024 22:51, Pavel Luzanov wrote:
On 23.01.2024 04:18, Tom Lane wrote:
I think expecting the pg_roles view to change for this is problematic.
You can't have that in the back branches, so with this patch psql
will show something different against a pre-17 server than later
versions
s own patch.
But within this thread or new one?
On 23.01.2024 05:30, David G. Johnston wrote:
On Sun, Jan 21, 2024 at 2:35 PM Pavel Luzanov
wrote:
List of roles
Role name | Attributes | Password? | Valid u
on limit"?
I'll think about it and try to implement in the next patch version within a few
days.
Thank you for review.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
y of the proposed alternatives is better than what we
have now.
But for moving forward we need to choose some approach.
I will be glad of any opinions.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
From 454ff68b64ca2ebcc2ba2e8d176f55ab018606cd Mon Sep 17 00:00:00 2001
From: P
tion limit | -1
Description | No password but with expire time
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
From 2ac990e66ce91efa319fce970ea37e98c6e89fa2 Mon Sep 17 00:00:00 2001
From: Pavel Luzanov
Date: Tue, 9 Jan 2024 23:46:31 +0300
Subject: [PATCH v2] psql: Rethinking of \du c
h questions - ECHO_HIDDEN variable.
But it is very important that the query text is easily transformed into
the command output.
Proposed patch tries to implement this approach.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
see a practical reasons to execute next command, since it
do nothing:
ALTER ROLE .. PASSWORD 'infinity';
So I think that in most cases there is no "infinity" in the
rolvaliduntil column.
But of course, I can be wrong.
Thank you for giving your opinion.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
expire time
charlie | yes| Create role
| yes || 0 | No
connections allowed
postgres | yes| Superuser, Create role, Create DB, Replication,
Bypass RLS | yes
I thought about this after your recent excellent article [1],
which has an introduction to system triggers.
This does not negate the need for the patch being discussed.
Patch v3 is attached.
For me, it is ready for committer.
1. https://www.cybertec-postgresql.com/en/broken-foreign-key
annot delete the row that he
just added. The reason is that system triggers are executed with the
rights of the table owner, not the current role. But I can't find a
description of this behavior in the documentation.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
't really like "This is not considered a bug" part, since it
looks like an excuse.
1. https://www.postgresql.org/docs/devel/trigger-definition.html
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
= 'active';
I propose to add a table alias for the wait_event column in the WHERE clause
for consistency.
1.https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW
--
Pavel Luzanov
Postgres Professional:https://postgrespr
The only question about "can be". Why not "will be"? The inheritance
behavior will be changed anyway.
Please let me know if I need any other changes. Thanks.
* Allow psql's access privilege commands to show system objects (Nathan
Bossart, Pavel Luzanov)
The options
attribute for a role now will affect (as the
default value) only future GRANT commands without an INHERIT clause.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
On 09.08.2023 21:06, Bruce Momjian wrote:
On Sun, Jul 23, 2023 at 02:09:17PM +0300, Pavel Luzanov wrote:
Please consider to add item to the psql section:
Add psql \drg command to display role grants and remove the "Member of"
column from \du & \dg altogether (d65ddaca)
The rel
On 24.07.2023 09:42, Pavel Luzanov wrote:
Is IS_GRANTABLE a key column for ROLE_AUTHORIZATION_DESCRIPTORS?
If not, duplicates is not possible. Right?
The answer is: no.
Duplicate pairs (grantee, role_name) is impossible only with defined key
with this two columns.
If there is no such key or
not doing that.
I noticed this, but the view stays unchanged so long time.
I thought it was done intentionally.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
ostgres@postgres(17.0)=*# SELECT * FROM
information_schema.applicable_roles WHERE grantee = 'alice';
grantee | role_name | is_grantable
-+---+--
alice | bob | YES
(1 row)
postgres@postgres(17.0)=*# ROLLBACK;
ROLLBACK
Should we add group by + bool_or to the applicable_roles view?
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
Please consider to add item to the psql section:
Add psql \drg command to display role grants and remove the "Member of"
column from \du & \dg altogether (d65ddaca)
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
On 19.07.2023 19:47, Tom Lane wrote:
And done, with some minor editorialization.
Thanks to everyone who participated in the work.
Special thanks to David for moving forward this patch for a long time,
and to Tom for taking commit responsibilities.
--
Pavel Luzanov
Postgres Professional
On 13.07.2023 11:26, Pavel Luzanov wrote:
And for versions <16 I forget to simplify expression for 'Options'
column after removing LEFT JOIN on pam:
SELECT m.rolname AS "Role name", r.rolname AS "Member of",
pg_catalog.concat_ws(', ',
CASE WHEN
options in versions where they are not actually present
in pg_auth_members, but can be determined.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
pam.grantor = g.oid)
WHERE m.rolname !~ '^pg_'
ORDER BY 1, 2, 4;
I plan to replace it to:
pg_catalog.concat_ws(', ',
CASE WHEN pam.admin_option THEN 'ADMIN' END,
CASE WHEN m.rolinherit THEN 'INHERIT' END,
'SET'
) AS "Options",
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
On 09.07.2023 13:56, Pavel Luzanov wrote:
On 08.07.2023 20:07, Tom Lane wrote:
1. I was thinking in terms of dropping the "Member of" column entirely
in \du and \dg. It doesn't tell you enough, and the output of those
commands is often too wide already.
2. You have describeR
does it look nice in \x display format.
I think this a reason why footer property explicitly disabled in the output.
As part of reworking footer should be enabled, as it worked for other
meta-commands.
Just to don't forget.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
out even for roles that have no grants, which seems like
clutter. The LEFT JOINs to r and g are fine, but I suggest changing
the first join to a plain join.
It was David's suggestion:
On 24.06.2023 18:57, David G. Johnston wrote:
On Sat, Jun 24, 2023 at 8:11 AM Pavel Luzanov
wrote:
Please find attached new patch version.
It implements \drg command and hides duplicates in \du & \dg commands.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
From a117f13fd497bf6ff8a504bcda6cb10d34dd22a7 Mon Sep 17 00:00:00 2001
From: Pavel Luzanov
Date: Mon, 26 Jun 2023 2
On 24.06.2023 18:57, David G. Johnston wrote:
On Sat, Jun 24, 2023 at 8:11 AM Pavel Luzanov
wrote:
There are two commands showing the same information about roles:
\du and
\dr.
I would add \dr as the new official command to complement adding \drg
and deprecate both \du and \dg
ady to take up this topic. There
is definitely room for improvement here.
But first I want to finish with the \du command.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
6.
The ADMIN OPTION is available in all supported versions.
* The new meta-command will not show all roles. It will only show the
roles included in other roles.
To show all roles you need to add an outer join between pg_roles and
pg_auth_members.
But all columns except "role" will be left blank. Is it worth doing this?
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
regress_du_admin |
t | t | t | postgres(10 rows)But is it worth inventing a new
psql command for this?
-
Pavel Luzanov
patch translation problems mentioned by
Kyotaro.
But it requires mapping elements between 3 array-like columns.
To move forward, needs more opinions?
-
Pavel Luzanov
t.sql
Description: application/sql
ctivity page doesn't say anything
about 'standalone backend'.
I think this question will be popular without clarifying in docs.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
more point. Grants without any option probably should be prohibited
as useless. But this is for a new thread.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
ons I plan to add this patch to Open Items for v16
https://wiki.postgresql.org/wiki/PostgreSQL_16_Open_Items
On 05.04.2023 17:24, David G. Johnston wrote:
On Wed, Apr 5, 2023 at 6:58 AM Tom Lane wrote:
Pavel Luzanov writes:
> What if this long output will be available only for \d
On 05.04.2023 03:41, Melanie Plageman wrote:
On Tue, Apr 4, 2023 at 4:35 PM Pavel Luzanov wrote:
After a little thought... I'm not sure about the term 'bootstrap
process'. I can't find this term in the documentation.
There are various mentions of "bootstrap" pe
ates)
roles in the current array format? For those, who don't care about these
new membership options, nothing will change.
Those, who need details will use the + modifier.
?
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
. Why not have the third column be
something like regress_du_role0 by regress_du_admin (admin, inherit,
set)?
'granted by' can be left without translation, but just 'by' required
translation, as I think.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
er' appears in the pg_stat_activity for parallel queries.
I think it's right here.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
Hello,
I found that the 'standalone backend' backend type is not documented
right now.
Adding something like (from commit message) would be helpful:
Both the bootstrap backend and single user mode backends will have
backend_type STANDALONE_BACKEND.
--
Pavel Luzanov
Postgres Pr
In the previous version, I didn't notice (unlike cfbot) the compiler
warning. Fixed in version 6.
-
Pavel Luzanov
From 1b8b5743df23637b70e8d4ad0df0e1f892c595f3 Mon Sep 17 00:00:00 2001
From: Pavel Luzanov
Date: Wed, 22 Mar 2023 20:54:41 +0300
Subject: [PATCH v6] psql: show membe
d.
-
Pavel Luzanov
From b8f35733126a843edd47a1f89da0d9f8babeec93 Mon Sep 17 00:00:00 2001
From: Pavel Luzanov
Date: Tue, 21 Mar 2023 05:58:31 +0300
Subject: [PATCH v5] psql: show membership options in the \du command
Format for the "Member of" column completely redesigned.
Shown wi
On 10.03.2023 15:06, Pavel Luzanov wrote:
I missed the comment at the beginning of the file about version 9.2. I
will return the version check for rolbypassrls.
+
+ Shown within each row, in newline-separated format, are the
memberships granted to
+ the role. The
w I don't have enough time and
experience. This requires an experienced developer.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
role with LOGIN.
Ok.
Thank you for review. I will definitely work on the new version, but
unfortunately and with a high probability it will happen after March 20.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
s
more reasonable to have INHERIT instead of USAGE.
And it is not very clear whether (except for backward compatibility) a
separate MEMBER value is needed at all.
I wouldn't bother starting yet another thread in this area right now,
this one can absorb some related changes as well as t
ls of the discussion patch.
I think to write about this to pgsql-docs additionally to this topic.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
Next version (v3) addresses complains from cfbot. Changed only tests.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
From 6db62993d4b7afbcbce3e63ce3fbe3946ec50cff Mon Sep 17 00:00:00 2001
From: Pavel Luzanov
Date: Wed, 1 Mar 2023 13:29:10 +0300
Subject: [PATCH v3] psql: \du
the patch. It implements
suggested display format and small refactoring of existing code for \du
command.
As a non-native writer, I have doubts about the documentation part.
--
Pavel Luzanov
Postgres Professional:https://postgrespro.com
From 70489a605687a325287bad109e2741dd7d08cea3 Mon Sep 1
On 17.02.2023 19:53, David G. Johnston wrote:
On Fri, Feb 17, 2023 at 4:02 AM Pavel Luzanov
wrote:
List of roles
Role name | Attributes | Member of
isplay membership options with \du+ may be at
least we must group records in 'Member of' column for \du command?
-
Pavel Luzanov
the other hand, I don't have an exact understanding of how best to do
it. That's why I proposed a variant for discussion. It is quite possible
that if there is no consensus, it would be better to leave it as is, and
get information by queries to the system catalog.
-
Pavel Luzanov
field values they can
use.
A short and precise description. Nothing to add.Next time I will try to
offer a patch at once.
-----
Pavel Luzanov
(8fea8683).
-
Pavel Luzanov
the role graph I took
this idea and extended out to an entire chain of roles (and also broke
out user and group separately) but I think doing the direct-grant only
here would still be a big improvement.
It will be interesting to see the result.
--
Pavel Luzanov
ommand.[1]
[1]https://www.postgresql.org/message-id/flat/b9be2d0e-a9bc-0a30-492f-a4f68e4f7...@postgrespro.ru
--
Pavel Luzanov
Added the patch to the open commitfest:
https://commitfest.postgresql.org/42/4116/
Feel free to reject if it's not interesting.
--
Pavel Luzanov
comments are welcome.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 8a5285da9a..ef3e87fa32 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1724,9 +1724,8 @@ INSERT
on its main
relation.
I agree, that would be ideally.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
xactly the same behavior
as for INSERT, SELECT, etc privileges - the MAINTAIN privilege would
work for
the whole partitioned table, but not for individual partitions.
[1]
https://www.postgresql.org/message-id/20221215002705.GA889413%40nathanxps13
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
(1 row)
alice@postgres(16.0)=> vacuum p;
WARNING: permission denied to vacuum "p1", skipping it
WARNING: permission denied to vacuum "p2", skipping it
VACUUM
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
mitted.
alice@postgres(16.0)=> VACUUM pg_type;
WARNING: permission denied to vacuum "pg_toast_1247", skipping it
VACUUM
[1]
https://www.postgresql.org/message-id/20221206193606.GB3078082%40nathanxps13
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
correctly states the existing behavior.
But perhaps we should wait for the decision in discussion [1] (link above),
since this decision may affect the documentation on the CLUSTER command.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
|index [re]set (storage_parameters)
- alter table|index set tablespace
- alter table alter column set storage|compression
- any actions with the TOAST table that can be performed separately from
the main table
I have to admit that the discussion has moved away from the $subject.
--
Pavel Luzano
//www.postgresql.org/docs/devel/sql-cluster.html)
similar to the one in the VACUUM documentation:
"To cluster a table, one must ordinarily be the table's owner or a
superuser."
Ready to participate, if it seems reasonable.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
On 06.12.2022 03:04, Nathan Bossart wrote:
I wonder why \dpS wasn't added. I wrote up a patch to add it and the
corresponding documentation that other meta-commands already have.
Yes, \dpS command and clarification in the documentation is exactly what
is needed.
--
Pavel Luzanov
Pos
s=arwdDxtvz/postgres+| |
| | | alice=vz/postgres | |
(1 row)
But perhaps this behavior should be reviewed or at least documented?
-
Pavel Luzanov
00 width=4) (actual time=0.012..121.995 rows=100 loops=1)
Settings: enable_incremental_sort = 'off', enable_seqscan = 'off'
Planning Time: 0.041 ms
Execution Time: 528.950 ms
(9 rows)
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
The Russian Postgres Company
0.011..155.260 rows=100 loops=1)
Settings: enable_seqscan = 'off', enable_sort = 'off'
Planning Time: 0.044 ms
Execution Time: 408.867 ms
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
The Russian Postgres Company
es are running. The less buffer cache is busy, the better. But in
single-user mode this query is slower.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
The Russian Postgres Company
0 loops=1)
Buffers: shared hit=5396
Planning:
Buffers: shared hit=9
Planning Time: 0.055 ms
Execution Time: 575.146 ms
(13 rows)
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
The Russian Postgres Company
choice with \du+ better.
But perhaps there are other choices as well.
If it's interesting, I'm ready to open a new thread (the commitfest
entry for this topic is now closed) and prepare a patch.
--
Pavel Luzanov
e, I can't think of a better candidate. Any of the
previously suggested list of \dconf, \dguc, \dG, \dcp is fine.
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
The Russian Postgres Company
ditorialization.
Thanks!
--
Pavel Luzanov
Postgres Professional: https://postgrespro.com
The Russian Postgres Company
1 - 100 of 124 matches
Mail list logo