1.) Khi bạn cần thêm thông báo vào truy vấn, bạn có thể sử dụng nhận xét lồng nhau
SELECT
a, b, c
FROM mytab;
2.) Loại bỏ các khoảng trắng theo dõi khỏi tất cả trường text
và varchar
trong cơ sở dữ liệu.
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.) Chúng ta có thể sử dụng một hàm cửa sổ để loại bỏ các hàng trùng lặp rất hiệu quả:
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);
Một số phiên bản được tối ưu hóa của PostgreSQL (với 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.) Khi chúng ta cần xác định trạng thái của máy chủ, thì chúng ta có thể sử dụng một hàm:
SELECT pg_is_in_recovery();
5.) Nhận lệnh DDL của chức năng.
select pg_get_functiondef((select oid from pg_proc where proname = 'f1'));
6.) Thay đổi an toàn kiểu dữ liệu cột trong 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
Bạn có thể thấy từ bảng trên rằng tôi đã sử dụng kiểu dữ liệu - 'ký tự thay đổi' cho
cột 'id' . Nhưng đó là một sai lầm, bởi vì tôi luôn cho các số nguyên làm id. Vì vậy, sử dụng varchar ở đây là một thực hành không tốt. Vì vậy, hãy thử thay đổi kiểu cột thành số nguyên.
ALTER TABLE test ALTER COLUMN id TYPE integer;
Nhưng nó trả về:
LỖI: cột “id” không thể được truyền tự động sang kiểu số nguyên Trạng thái SQL: 42804 Gợi ý: Chỉ định một biểu thức USING để thực hiện chuyển đổi
Điều đó có nghĩa là chúng ta không thể thay đổi kiểu dữ liệu một cách đơn giản vì dữ liệu đã có sẵn trong cột. Vì dữ liệu thuộc loại 'ký tự thay đổi' nên postgres không thể mong đợi nó là số nguyên mặc dù chúng tôi chỉ nhập số nguyên. Vì vậy, bây giờ, như postgres đề xuất, chúng tôi có thể sử dụng biểu thức 'USING' để truyền dữ liệu của chúng tôi thành số nguyên.
ALTER TABLE test ALTER COLUMN id TYPE integer USING (id ::integer);
Nó hoạt động.
7.) Biết ai được kết nối với Cơ sở dữ liệu
Đây ít nhiều là một lệnh giám sát. Để biết người dùng nào đã kết nối với cơ sở dữ liệu nào bao gồm IP và Cổng của họ, hãy sử dụng SQL sau:
SELECT datname,usename,client_addr,client_port FROM pg_stat_activity ;
8.) Tải lại tệp cấu hình PostgreSQL mà không cần khởi động lại máy chủ
Các tham số cấu hình PostgreSQL nằm trong các tệp đặc biệt như postgresql.conf và pg_hba.conf. Thông thường, bạn có thể cần phải thay đổi các thông số này. Nhưng để một số tham số có hiệu lực, chúng ta thường cần tải lại tệp cấu hình. Tất nhiên, khởi động lại máy chủ sẽ làm điều đó. Nhưng trong môi trường sản xuất, việc khởi động lại cơ sở dữ liệu đang được hàng nghìn người sử dụng không được ưu tiên, chỉ để thiết lập một số tham số. Trong những tình huống như vậy, chúng tôi có thể tải lại các tệp cấu hình mà không cần khởi động lại máy chủ bằng cách sử dụng chức năng sau:
select pg_reload_conf();
Hãy nhớ rằng, điều này sẽ không hoạt động đối với tất cả các tham số, một số thay đổi tham số cần khởi động lại toàn bộ máy chủ để có hiệu lực.
9.) Lấy đường dẫn thư mục dữ liệu của cụm cơ sở dữ liệu hiện tại
Có thể trong một hệ thống, nhiều trường hợp (cụm) của PostgreSQL được thiết lập, nói chung, trong các cổng khác nhau hoặc tương tự. Trong những trường hợp như vậy, việc tìm kiếm thư mục (thư mục lưu trữ vật lý) được sử dụng bởi phiên bản nào là một nhiệm vụ bận rộn. Trong những trường hợp như vậy, chúng ta có thể sử dụng lệnh sau trong bất kỳ cơ sở dữ liệu nào trong cụm mà chúng ta quan tâm để lấy đường dẫn thư mục:
SHOW data_directory;
Chức năng tương tự có thể được sử dụng để thay đổi thư mục dữ liệu của cụm, nhưng nó yêu cầu máy chủ khởi động lại:
SET data_directory to new_directory_path;
10.) Tìm một CHAR là NGÀY hay không
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;
Cách sử dụng: phần sau sẽ trả về True
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.) Thay đổi chủ sở hữu trong PostgreSQL
REASSIGN OWNED BY sa TO postgres;
12.) THIẾT BỊ GỬI PGADMIN PLPGSQL
Giải thích rõ ở đây