vault backup: 2023-01-12 18:01:26
This commit is contained in:
parent
f163583f88
commit
be034057e0
280
postgres.md
Normal file
280
postgres.md
Normal file
@ -0,0 +1,280 @@
|
||||
Install
|
||||
=========================================================
|
||||
|
||||
[PostgreSQL: Linux downloads (Ubuntu)](https://www.postgresql.org/download/linux/ubuntu/)
|
||||
```
|
||||
# Create the file repository configuration:
|
||||
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
|
||||
# Import the repository signing key:
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
|
||||
# Update the package lists:
|
||||
sudo apt-get update
|
||||
|
||||
# Install the latest version of PostgreSQL.
|
||||
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
|
||||
sudo apt-get -y install postgresql
|
||||
```
|
||||
|
||||
|
||||
|
||||
SSPI
|
||||
========================================================
|
||||
|
||||
setup for single sign on with [SSPI](https://wiki.postgresql.org/wiki/Configuring_for_single_sign-on_using_SSPI_on_Windows)
|
||||
|
||||
md5 hash is salted with username in front
|
||||
|
||||
Memory
|
||||
=========================================================
|
||||
see whats in the buffer cache with pg_buffercache
|
||||
|
||||
`CREATE EXTENSION pg_buffercache`
|
||||
|
||||
```
|
||||
SELECT
|
||||
c.relname,
|
||||
COUNT(*) AS buffers
|
||||
FROM
|
||||
pg_class c
|
||||
INNER JOIN pg_buffercache b ON
|
||||
b.relfilenode = c.relfilenode
|
||||
INNER JOIN pg_database d ON
|
||||
( b.reldatabase = d.oid
|
||||
AND d.datname = CURRENT_DATABASE())
|
||||
GROUP BY
|
||||
c.relname
|
||||
ORDER BY
|
||||
2 DESC
|
||||
LIMIT 100;
|
||||
```
|
||||
|
||||
Alter Column
|
||||
==========================================================
|
||||
ALTER TABLE rlarp.pcore ALTER COLUMN pack SET DATA TYPE numeric USING pack::numeric
|
||||
|
||||
psql binary for latest version is always used but pg_dump is not, you have to set the default version in ~/.postgresqlrc
|
||||
|
||||
PostGIS
|
||||
==========================================================
|
||||
|
||||
quickstart tutorial
|
||||
|
||||
https://blog.crunchydata.com/blog/postgis-for-newbies
|
||||
|
||||
Move Data Directory
|
||||
===========================================================
|
||||
https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-18-04
|
||||
|
||||
copy the data
|
||||
`sudo rsync -av /var/lib/postgresql /target_dir`
|
||||
|
||||
rename original as a backup
|
||||
`sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak`
|
||||
|
||||
point postgres to the new data directory
|
||||
`sudo vim //etc/postgresql/14/main/postgres.conf`
|
||||
` data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'`
|
||||
|
||||
remove the old data
|
||||
`sudo rm -Rf /var/lib/postgresql/10/main.bak`
|
||||
|
||||
Special Aggregates
|
||||
==========================================================
|
||||
To extract aggregate definitions can select from `pg_aggregate`
|
||||
|
||||
|
||||
SQL for current aggregates I'm using now:
|
||||
```
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_concat(
|
||||
state jsonb,
|
||||
concat jsonb)
|
||||
RETURNS jsonb AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--RAISE notice 'state is %', state;
|
||||
--RAISE notice 'concat is %', concat;
|
||||
RETURN state || concat;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql VOLATILE
|
||||
COST 100;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_concat_distinct_arr(
|
||||
state jsonb,
|
||||
concat jsonb)
|
||||
RETURNS jsonb AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--RAISE notice 'state is %', state;
|
||||
--RAISE notice 'concat is %', concat;
|
||||
RETURN SELECT jsonb_agg(state || concat;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql VOLATILE
|
||||
COST 100;
|
||||
|
||||
|
||||
DROP AGGREGATE IF EXISTS public.jsonb_arr_aggc(jsonb);
|
||||
CREATE AGGREGATE public.jsonb_arr_aggc(jsonb) (
|
||||
SFUNC=public.jsonb_concat,
|
||||
STYPE=jsonb,
|
||||
INITCOND='[]'
|
||||
);
|
||||
|
||||
DROP AGGREGATE IF EXISTS public.jsonb_obj_aggc(jsonb);
|
||||
CREATE AGGREGATE public.jsonb_obj_aggc(jsonb) (
|
||||
SFUNC=public.jsonb_concat,
|
||||
STYPE=jsonb,
|
||||
INITCOND='{}'
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_array_add_distinct(_arr jsonb, _add text) RETURNS jsonb AS
|
||||
$$
|
||||
DECLARE
|
||||
_ret jsonb;
|
||||
|
||||
BEGIN
|
||||
|
||||
SELECT
|
||||
jsonb_agg(DISTINCT x.ae)
|
||||
INTO
|
||||
_ret
|
||||
FROM
|
||||
(
|
||||
SELECT jsonb_array_elements_text(_arr) ae
|
||||
UNION ALL
|
||||
SELECT _add ae
|
||||
) x;
|
||||
|
||||
RETURN _ret;
|
||||
|
||||
END;
|
||||
$$
|
||||
language plpgsql
|
||||
DROP FUNCTION IF EXISTS public.jsonb_array_string_agg;
|
||||
CREATE FUNCTION public.jsonb_array_string_agg(_arr jsonb, _delim text) RETURNS text AS
|
||||
$$
|
||||
DECLARE
|
||||
_ret text;
|
||||
|
||||
BEGIN
|
||||
|
||||
SELECT
|
||||
string_agg(ae.v,_delim)
|
||||
INTO
|
||||
_ret
|
||||
FROM
|
||||
jsonb_array_elements_text(_arr) ae(v);
|
||||
|
||||
return _ret;
|
||||
|
||||
END;
|
||||
$$
|
||||
LANGUAGE plpgsql;
|
||||
|
||||
|
||||
```
|
||||
|
||||
PSQL
|
||||
===============================================================
|
||||
use -E to show definitions of SQL used for \d commands
|
||||
|
||||
Descriptions
|
||||
===================================================
|
||||
```
|
||||
SELECT
|
||||
c.relname table_name,
|
||||
td.description table_description,
|
||||
n.nspname schema_name,
|
||||
a.attname As column_name,
|
||||
cd.description column_description
|
||||
FROM
|
||||
pg_class As c
|
||||
INNER JOIN pg_attribute As a ON
|
||||
c.oid = a.attrelid
|
||||
LEFT JOIN pg_namespace n ON
|
||||
n.oid = c.relnamespace
|
||||
LEFT JOIN pg_tablespace t ON
|
||||
t.oid = c.reltablespace
|
||||
LEFT JOIN pg_description As cd ON
|
||||
cd.objoid = c.oid
|
||||
AND cd.objsubid = a.attnum
|
||||
LEFT JOIN pg_description As td ON
|
||||
td.objoid = c.oid
|
||||
AND td.objsubid = 0
|
||||
WHERE
|
||||
c.relkind IN('r', 'v')
|
||||
--AND a.attname = 'd07txn'
|
||||
AND cd.description like '%Transaction Number%'
|
||||
ORDER BY
|
||||
n.nspname,
|
||||
c.relname,
|
||||
a.attname
|
||||
```
|
||||
|
||||
Foreign Data Wrapper
|
||||
===============================================================
|
||||
```
|
||||
CREATE EXTENSION postgres_fdw;
|
||||
|
||||
CREATE SERVER hptrow
|
||||
FOREIGN DATA WRAPPER postgres_fdw
|
||||
OPTIONS (host 'hptrow.me', port '54339', dbname 'ubm');
|
||||
|
||||
CREATE USER MAPPING FOR ptrowbridge
|
||||
SERVER hptrow
|
||||
OPTIONS (user 'ptrowbridge', password 'gyaswddh1983');
|
||||
|
||||
CREATE SCHEMA frlarp;
|
||||
|
||||
IMPORT FOREIGN SCHEMA rlarp
|
||||
FROM SERVER hptrow INTO frlarp;
|
||||
```
|
||||
|
||||
|
||||
User DDL
|
||||
===============================================================
|
||||
```
|
||||
DROP USER IF EXISTS api;
|
||||
|
||||
SET password_encryption = 'scram-sha-256';
|
||||
|
||||
CREATE ROLE api WITH
|
||||
LOGIN
|
||||
NOSUPERUSER
|
||||
NOCREATEDB
|
||||
NOCREATEROLE
|
||||
INHERIT
|
||||
NOREPLICATION
|
||||
CONNECTION LIMIT -1
|
||||
PASSWORD 'api';
|
||||
|
||||
--------------------grant--------------------------------------------------
|
||||
|
||||
GRANT USAGE ON SCHEMA lgdat TO api;
|
||||
|
||||
GRANT SELECT /*, UPDATE, INSERT, DELETE*/ ON ALL TABLES IN SCHEMA lgdat TO api;
|
||||
|
||||
GRANT USAGE ON ALL SEQUENCES IN SCHEMA lgdat TO api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat GRANT SELECT/*, UPDATE, INSERT, DELETE*/ ON TABLES TO api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat GRANT USAGE ON SEQUENCES TO api;
|
||||
|
||||
---------------------------revoke---------------------------------------
|
||||
|
||||
REVOKE USAGE ON SCHEMA lgdat FROM api;
|
||||
|
||||
REVOKE USAGE ON SCHEMA lgdat FROM api;
|
||||
|
||||
REVOKE SELECT , UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA lgdat FROM api;
|
||||
|
||||
REVOKE USAGE ON ALL SEQUENCES IN SCHEMA lgdat FROM api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat REVOKE SELECT, UPDATE, INSERT, DELETE ON TABLES FROM api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat REVOKE USAGE ON SEQUENCES FROM api;
|
||||
```
|
@ -1,49 +0,0 @@
|
||||
To extract aggregate definitions can select from `pg_aggregate`
|
||||
|
||||
|
||||
SQL for current aggregates I'm using now:
|
||||
```
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_concat(
|
||||
state jsonb,
|
||||
concat jsonb)
|
||||
RETURNS jsonb AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--RAISE notice 'state is %', state;
|
||||
--RAISE notice 'concat is %', concat;
|
||||
RETURN state || concat;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql VOLATILE
|
||||
COST 100;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_concat_distinct_arr(
|
||||
state jsonb,
|
||||
concat jsonb)
|
||||
RETURNS jsonb AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--RAISE notice 'state is %', state;
|
||||
--RAISE notice 'concat is %', concat;
|
||||
RETURN SELECT jsonb_agg(state || concat;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql VOLATILE
|
||||
COST 100;
|
||||
|
||||
|
||||
DROP AGGREGATE IF EXISTS public.jsonb_arr_aggc(jsonb);
|
||||
CREATE AGGREGATE public.jsonb_arr_aggc(jsonb) (
|
||||
SFUNC=public.jsonb_concat,
|
||||
STYPE=jsonb,
|
||||
INITCOND='[]'
|
||||
);
|
||||
|
||||
DROP AGGREGATE IF EXISTS public.jsonb_obj_aggc(jsonb);
|
||||
CREATE AGGREGATE public.jsonb_obj_aggc(jsonb) (
|
||||
SFUNC=public.jsonb_concat,
|
||||
STYPE=jsonb,
|
||||
INITCOND='{}'
|
||||
);
|
||||
```
|
@ -1,27 +0,0 @@
|
||||
DO $$
|
||||
DECLARE
|
||||
|
||||
_a1 jsonb;
|
||||
_a2 jsonb;
|
||||
_a3 jsonb;
|
||||
|
||||
BEGIN
|
||||
|
||||
_a1 := (select '["A","B","A"]'::jsonb);
|
||||
_a2 := (select '["A","B","A"]'::jsonb);
|
||||
SELECT
|
||||
jsonb_agg(DISTINCT x.ae)
|
||||
INTO
|
||||
_a3
|
||||
FROM
|
||||
(
|
||||
SELECT jsonb_array_elements(_a1) ae
|
||||
UNION ALL
|
||||
SELECT jsonb_array_elements(_a2) ae
|
||||
) x;
|
||||
|
||||
raise notice '%', _a3;
|
||||
|
||||
END;
|
||||
$$
|
||||
language plpgsql
|
@ -1,28 +0,0 @@
|
||||
SELECT
|
||||
c.relname table_name,
|
||||
td.description table_description,
|
||||
n.nspname schema_name,
|
||||
a.attname As column_name,
|
||||
cd.description column_description
|
||||
FROM
|
||||
pg_class As c
|
||||
INNER JOIN pg_attribute As a ON
|
||||
c.oid = a.attrelid
|
||||
LEFT JOIN pg_namespace n ON
|
||||
n.oid = c.relnamespace
|
||||
LEFT JOIN pg_tablespace t ON
|
||||
t.oid = c.reltablespace
|
||||
LEFT JOIN pg_description As cd ON
|
||||
cd.objoid = c.oid
|
||||
AND cd.objsubid = a.attnum
|
||||
LEFT JOIN pg_description As td ON
|
||||
td.objoid = c.oid
|
||||
AND td.objsubid = 0
|
||||
WHERE
|
||||
c.relkind IN('r', 'v')
|
||||
--AND a.attname = 'd07txn'
|
||||
AND cd.description like '%Transaction Number%'
|
||||
ORDER BY
|
||||
n.nspname,
|
||||
c.relname,
|
||||
a.attname
|
@ -1,14 +0,0 @@
|
||||
CREATE EXTENSION postgres_fdw;
|
||||
|
||||
CREATE SERVER hptrow
|
||||
FOREIGN DATA WRAPPER postgres_fdw
|
||||
OPTIONS (host 'hptrow.me', port '54339', dbname 'ubm');
|
||||
|
||||
CREATE USER MAPPING FOR ptrowbridge
|
||||
SERVER hptrow
|
||||
OPTIONS (user 'ptrowbridge', password 'gyaswddh1983');
|
||||
|
||||
CREATE SCHEMA frlarp;
|
||||
|
||||
IMPORT FOREIGN SCHEMA rlarp
|
||||
FROM SERVER hptrow INTO frlarp;
|
@ -1,4 +0,0 @@
|
||||
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install postgresql
|
@ -1,27 +0,0 @@
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_concat_distinct_arr(
|
||||
state jsonb,
|
||||
concat jsonb)
|
||||
RETURNS jsonb AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--RAISE notice 'state is %', state;
|
||||
--RAISE notice 'concat is %', concat;
|
||||
RETURN
|
||||
jsonb_agg(DISTINCT ae)
|
||||
FROM
|
||||
(
|
||||
SELECT jsonb_array_elements(state) ae
|
||||
UNION ALL
|
||||
SELECT jsonb_array_elements(concat) ae
|
||||
) x;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql;
|
||||
|
||||
DROP AGGREGATE IF EXISTS public.jsonb_arr_aggcd(jsonb);
|
||||
CREATE AGGREGATE public.jsonb_arr_aggcd(jsonb) (
|
||||
SFUNC=public.jsonb_concat_distinct_arr,
|
||||
STYPE=jsonb,
|
||||
INITCOND='[]'
|
||||
);
|
||||
|
@ -1,23 +0,0 @@
|
||||
CREATE OR REPLACE FUNCTION public.jsonb_array_add_distinct(_arr jsonb, _add text) RETURNS jsonb AS
|
||||
$$
|
||||
DECLARE
|
||||
_ret jsonb;
|
||||
|
||||
BEGIN
|
||||
|
||||
SELECT
|
||||
jsonb_agg(DISTINCT x.ae)
|
||||
INTO
|
||||
_ret
|
||||
FROM
|
||||
(
|
||||
SELECT jsonb_array_elements_text(_arr) ae
|
||||
UNION ALL
|
||||
SELECT _add ae
|
||||
) x;
|
||||
|
||||
RETURN _ret;
|
||||
|
||||
END;
|
||||
$$
|
||||
language plpgsql
|
@ -1,20 +0,0 @@
|
||||
DROP FUNCTION IF EXISTS public.jsonb_array_string_agg;
|
||||
CREATE FUNCTION public.jsonb_array_string_agg(_arr jsonb, _delim text) RETURNS text AS
|
||||
$$
|
||||
DECLARE
|
||||
_ret text;
|
||||
|
||||
BEGIN
|
||||
|
||||
SELECT
|
||||
string_agg(ae.v,_delim)
|
||||
INTO
|
||||
_ret
|
||||
FROM
|
||||
jsonb_array_elements_text(_arr) ae(v);
|
||||
|
||||
return _ret;
|
||||
|
||||
END;
|
||||
$$
|
||||
LANGUAGE plpgsql;
|
@ -1,14 +0,0 @@
|
||||
https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-18-04
|
||||
|
||||
copy the data
|
||||
`sudo rsync -av /var/lib/postgresql /target_dir`
|
||||
|
||||
rename original as a backup
|
||||
`sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak`
|
||||
|
||||
point postgres to the new data directory
|
||||
`sudo vim //etc/postgresql/14/main/postgres.conf`
|
||||
` data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'`
|
||||
|
||||
remove the old data
|
||||
`sudo rm -Rf /var/lib/postgresql/10/main.bak`
|
@ -1,12 +0,0 @@
|
||||
logs from trying to start with not enough memory:
|
||||
```
|
||||
207716 2020-02-11 11:33:02 EST [2969]: [1-1] user=,db=,app=,client=,remote=LOG: starting PostgreSQL 12.1 (Ubuntu 12.1-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit
|
||||
207717 2020-02-11 11:33:02 EST [2969]: [2-1] user=,db=,app=,client=,remote=LOG: listening on IPv4 address "0.0.0.0", port 5030
|
||||
207718 2020-02-11 11:33:02 EST [2969]: [3-1] user=,db=,app=,client=,remote=LOG: listening on IPv6 address "::", port 5030
|
||||
207719 2020-02-11 11:33:04 EST [2969]: [4-1] user=,db=,app=,client=,remote=LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5030"
|
||||
207720 2020-02-11 11:33:06 EST [2969]: [5-1] user=,db=,app=,client=,remote=FATAL: could not map anonymous shared memory: Cannot allocate memory
|
||||
207721 2020-02-11 11:33:06 EST [2969]: [6-1] user=,db=,app=,client=,remote=HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 4423614464 bytes ), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
|
||||
207722 2020-02-11 11:33:06 EST [2969]: [7-1] user=,db=,app=,client=,remote=LOG: database system is shut down
|
||||
207723 pg_ctl: could not start server
|
||||
207724 Examine the log output.
|
||||
```
|
@ -1,3 +0,0 @@
|
||||
quickstart tutorial
|
||||
|
||||
https://blog.crunchydata.com/blog/postgis-for-newbies
|
@ -1,34 +0,0 @@
|
||||
setup for single sign on with [SSPI](https://wiki.postgresql.org/wiki/Configuring_for_single_sign-on_using_SSPI_on_Windows)
|
||||
|
||||
md5 hash is salted with username in front
|
||||
|
||||
|
||||
Memory
|
||||
=========================================================
|
||||
see whats in the buffer cache with pg_buffercache
|
||||
|
||||
`CREATE EXTENSION pg_buffercache`
|
||||
|
||||
```
|
||||
SELECT
|
||||
c.relname,
|
||||
COUNT(*) AS buffers
|
||||
FROM
|
||||
pg_class c
|
||||
INNER JOIN pg_buffercache b ON
|
||||
b.relfilenode = c.relfilenode
|
||||
INNER JOIN pg_database d ON
|
||||
( b.reldatabase = d.oid
|
||||
AND d.datname = CURRENT_DATABASE())
|
||||
GROUP BY
|
||||
c.relname
|
||||
ORDER BY
|
||||
2 DESC
|
||||
LIMIT 100;
|
||||
```
|
||||
|
||||
Alter Column
|
||||
==========================================================
|
||||
ALTER TABLE rlarp.pcore ALTER COLUMN pack SET DATA TYPE numeric USING pack::numeric
|
||||
|
||||
psql binary for latest version is always used but pg_dump is not, you have to set the default version in ~/.postgresqlrc
|
@ -1 +0,0 @@
|
||||
use -E to show definitions of SQL used for \d commands
|
@ -1,39 +0,0 @@
|
||||
DROP USER IF EXISTS api;
|
||||
|
||||
SET password_encryption = 'scram-sha-256';
|
||||
|
||||
CREATE ROLE api WITH
|
||||
LOGIN
|
||||
NOSUPERUSER
|
||||
NOCREATEDB
|
||||
NOCREATEROLE
|
||||
INHERIT
|
||||
NOREPLICATION
|
||||
CONNECTION LIMIT -1
|
||||
PASSWORD 'api';
|
||||
|
||||
--------------------grant--------------------------------------------------
|
||||
|
||||
GRANT USAGE ON SCHEMA lgdat TO api;
|
||||
|
||||
GRANT SELECT /*, UPDATE, INSERT, DELETE*/ ON ALL TABLES IN SCHEMA lgdat TO api;
|
||||
|
||||
GRANT USAGE ON ALL SEQUENCES IN SCHEMA lgdat TO api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat GRANT SELECT/*, UPDATE, INSERT, DELETE*/ ON TABLES TO api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat GRANT USAGE ON SEQUENCES TO api;
|
||||
|
||||
---------------------------revoke---------------------------------------
|
||||
|
||||
REVOKE USAGE ON SCHEMA lgdat FROM api;
|
||||
|
||||
REVOKE USAGE ON SCHEMA lgdat FROM api;
|
||||
|
||||
REVOKE SELECT , UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA lgdat FROM api;
|
||||
|
||||
REVOKE USAGE ON ALL SEQUENCES IN SCHEMA lgdat FROM api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat REVOKE SELECT, UPDATE, INSERT, DELETE ON TABLES FROM api;
|
||||
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA lgdat REVOKE USAGE ON SEQUENCES FROM api;
|
Loading…
Reference in New Issue
Block a user