1.) Wenn Sie zum Abfragen eine Benachrichtigung anhängen müssen, können Sie einen verschachtelten Kommentar verwenden
SELECT
a, b, c
FROM mytab;
2.) Entfernen Sie nachgestellte Leerzeichen aus allen text
und- varchar
Feldern in einer Datenbank.
do $$
declare
selectrow record;
begin
for selectrow in
select
'UPDATE '||c.table_name||' SET '||c.COLUMN_NAME||'=TRIM('||c.COLUMN_NAME||') WHERE '||c.COLUMN_NAME||' ILIKE ''% '' ' as script
from (
select
table_name,COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
table_name LIKE 'tbl%' and (data_type='text' or data_type='character varying' )
) c
loop
execute selectrow.script;
end loop;
end;
$$;
3.) Wir können eine Fensterfunktion verwenden, um doppelte Zeilen sehr effektiv zu entfernen:
DELETE FROM tab
WHERE id IN (SELECT id
FROM (SELECT row_number() OVER (PARTITION BY column_with_duplicate_values), id
FROM tab) x
WHERE x.row_number > 1);
Einige optimierte PostgreSQL-Versionen (mit ctid):
DELETE FROM tab
WHERE ctid = ANY(ARRAY(SELECT ctid
FROM (SELECT row_number() OVER (PARTITION BY column_with_duplicate_values), ctid
FROM tab) x
WHERE x.row_number > 1));
4.) Wenn wir den Serverstatus identifizieren müssen, können wir eine Funktion verwenden:
SELECT pg_is_in_recovery();
5.) Holen Sie sich den DDL-Befehl der Funktionen.
select pg_get_functiondef((select oid from pg_proc where proname = 'f1'));
6.) Sicheres Ändern des Spaltendatentyps in PostgreSQL
create table test(id varchar );
insert into test values('1');
insert into test values('11');
insert into test values('12');
select * from test
id
character varying
1
11
12
Sie können der obigen Tabelle entnehmen, dass ich den Datentyp "Zeichen variierend" für die
Spalte "ID" verwendet habe . Aber es war ein Fehler, weil ich immer ganze Zahlen als ID gebe. Daher ist die Verwendung von Varchar hier eine schlechte Praxis. Versuchen wir also, den Spaltentyp in eine Ganzzahl zu ändern.
ALTER TABLE test ALTER COLUMN id TYPE integer;
Aber es kehrt zurück:
FEHLER: Die Spalte "id" kann nicht automatisch in einen ganzzahligen SQL-Status umgewandelt werden: 42804 Hinweis: Geben Sie einen USING-Ausdruck an, um die Konvertierung durchzuführen
Das heißt, wir können den Datentyp nicht einfach ändern, da die Daten bereits in der Spalte vorhanden sind. Da die Daten vom Typ 'zeichenvariierend' sind, können Postgres sie nicht als Ganzzahl erwarten, obwohl wir nur Ganzzahlen eingegeben haben. Wie postgres vorgeschlagen hat, können wir jetzt den Ausdruck 'USING' verwenden, um unsere Daten in Ganzzahlen umzuwandeln.
ALTER TABLE test ALTER COLUMN id TYPE integer USING (id ::integer);
Es klappt.
7.) Wissen, wer mit der Datenbank verbunden ist
Dies ist mehr oder weniger ein Überwachungsbefehl. Verwenden Sie die folgende SQL, um festzustellen, welcher Benutzer mit welcher Datenbank verbunden ist, einschließlich IP und Port:
SELECT datname,usename,client_addr,client_port FROM pg_stat_activity ;
8.) PostgreSQL-Konfigurationsdateien neu laden, ohne den Server neu zu starten
PostgreSQL-Konfigurationsparameter befinden sich in speziellen Dateien wie postgresql.conf und pg_hba.conf. Oft müssen Sie diese Parameter ändern. Damit einige Parameter wirksam werden, müssen wir die Konfigurationsdatei häufig neu laden. Ein Neustart des Servers reicht natürlich aus. In einer Produktionsumgebung ist es jedoch nicht bevorzugt, die Datenbank, die von Tausenden verwendet wird, neu zu starten, nur um einige Parameter festzulegen. In solchen Situationen können wir die Konfigurationsdateien neu laden, ohne den Server mit der folgenden Funktion neu zu starten:
select pg_reload_conf();
Denken Sie daran, dass dies nicht für alle Parameter funktioniert. Einige Parameteränderungen erfordern einen vollständigen Neustart des Servers, um wirksam zu werden.
9.) Abrufen des Datenverzeichnispfads des aktuellen Datenbankclusters
Es ist möglich, dass in einem System mehrere Instanzen (Cluster) von PostgreSQL im Allgemeinen an verschiedenen Ports oder so eingerichtet werden. In solchen Fällen ist es eine hektische Aufgabe, herauszufinden, welches Verzeichnis (physisches Speicherverzeichnis) von welcher Instanz verwendet wird. In solchen Fällen können wir den folgenden Befehl in jeder Datenbank in dem Cluster von Interesse verwenden, um den Verzeichnispfad abzurufen:
SHOW data_directory;
Dieselbe Funktion kann zum Ändern des Datenverzeichnisses des Clusters verwendet werden, erfordert jedoch einen Neustart des Servers:
SET data_directory to new_directory_path;
10.) Finden Sie ein CHAR ist DATE oder nicht
create or replace function is_date(s varchar) returns boolean as $$
begin
perform s::date;
return true;
exception when others then
return false;
end;
$$ language plpgsql;
Verwendung: Folgendes gibt True zurück
select is_date('12-12-2014')
select is_date('12/12/2014')
select is_date('20141212')
select is_date('2014.12.12')
select is_date('2014,12,12')
11.) Ändern Sie den Eigentümer in PostgreSQL
REASSIGN OWNED BY sa TO postgres;
12.) PGADMIN PLPGSQL DEBUGGER
Nun erklärt hier