PostgreSQL 9.6.0 �ֲ�
| |||
---|---|---|---|
��һҳ | ��һ�� | �� 36. ��չ SQL | ��һҳ |
һ����PostgreSQL���õ���չͨ��������� SQL �������磬һ���µ��������ͽ���Ҫ�º������²������Լ����ܵ��������������ࡣ��������Щ�����ռ���һ����һ���������ڼ����ݿ������PostgreSQL������һ����Ϊһ����չ��Ҫ����һ����չ����������Ҫһ��������������չ�Ķ����SQL������ű��ļ��Լ�һ��ָ����չ������һЩ�������Ե������ļ��������չ���� C ���룬ͨ������һ�� C ���������ɵĹ������ļ���һ����������Щ�ļ���һ���򵥵�CREATE EXTENSION������԰���Щ�������뵽������ݿ⡣
ʹ��һ����չ������ֻ����SQL�ű�����һ��"��ɢ"�������ݿ����Ҫ�ŵ��ǣ�PostgreSQL�����������չ�Ķ�����һ��ġ��������һ����һ��DROP EXTENSION����ɾ�����еĶ��󣨲���ά��һ��������"�"�ű����� ���������õ�һ���ǣ�pg_dump֪������Ӧ��ת������չ�еĸ����Ա���� — ����ֻ��ת���а���һ��CREATE EXTENSION����������Ǩ�Ƶ�һ��������ͬ�ھɰ���չ�ж�����°���չ�Ĺ�����������ע���ڰ�����һ��ת�����뵽һ�������ݿ�ʱ������չ�Ŀ��ơ��ű��������ļ�������á�
PostgreSQL��������ɾ��������һ����չ�еĸ�����󣬳���ɾ��������չ�����У���Ȼ���ܹ��ı�һ����չ�ij�Ա����Ķ��壨���磬ͨ��CREATE OR REPLACE FUNCTION�ı�һ������������ס���޸ĺ�Ķ��彫���ᱻpg_dumpת�������ָı�ͨ��ֻ�����㲢��������չ�ű��ļ���������ͬ����ʱ�������壨���Ƕ��ڰ����������ݵı�������Ĺ涨������ 36.15.3 �����������������У�ͨ�����õķ�ʽ�Ǵ���һ����չ���½ű���ִ�ж���չ�г�Ա����ĸ��ġ�
��չ�ű����ܻ�ͨ��GRANT��REVOKE���������չ�������������Ȩ��ÿһ�������������Ȩ���ϣ�����������κ���Ȩ�������洢��pg_init_privsϵͳĿ¼�С�ʹ��pg_dumpʱ��CREATE EXTENSION�����������ת���У��������ű�Ҫ��GRANT��REVOKE��伯�������������Ȩ���ó�ȡ�ø�ת��ʱ�����ӡ�
PostgreSQL��ǰ��֧����չ�ű�����CREATE POLICY����SECURITY LABEL��䡣��Щ����������Ӧ������չ��������֮�������С���������չ�����ϴ����� RLS ���ԺͰ�ȫ��ǩ������������pg_dump������ת���С�
��չ����Ҳ�Դ������һ����չ������ SQL ��������޸Ľű��й涨�����磬���һ����չ�� 1.1 �汾�� 1.0 �汾������һ���������Ҹ�������һ�������ĺ����壬����չ�����߿����ṩһ�����½ű��������������ġ���ôALTER EXTENSION UPDATE������Ա�����Ӧ����Щ���IJ��Ҹ����ڸ������ݿ���ʵ�ʰ�װ���Ǹ���չ���ĸ��汾��
����Ϊһ����չ�ij�Ա�� SQL �����������ALTER EXTENSION��ʾ�����������ݿ⼯�ط�Χ�Ķ����������ݿ⡢��ɫ�ͱ��ռ䣩������Ϊ��չ��Ա����Ϊһ����չֻ��һ�����ݿⷶΧ�ڿɼ�������һ����չ�ű���û�б���ֹ������Щ���󣬵������������޷���������Ϊ��չ��һ���������٣�����Ҫע����Ȼһ����������һ����չ�ij�Ա�����ķ��������������������ᱻֱ����Ϊ�Ǹ���չ�ij�Ա����һ���ص���ģʽ����������չ�����Ƿ��������У�һ����չ������һ�������޶������Ʋ��Ҳ��������κ�ģʽ"��"����������չ�ij�Ա����ֻҪ�������ͺ��ʾͿ�������ģʽ��һ����չӵ�а������Ա�����ģʽ���ܺ���Ҳ���ܲ����ʡ�
CREATE EXTENSION��������ÿһ����չ���еĿ����ļ��������ļ����뱻����Ϊ��չ�����Ƽ���һ����׺.control�����ұ��뱻���ڰ�װ��SHAREDIR/extensionĿ¼�С�������������һ��SQL�ű��ļ�������Ñ����ģʽextension--version.sql�����磬foo--1.0.sql��ʾ��չfoo��1.0�汾����Ĭ������£��ű��ļ�Ҳ��������SHAREDIR/extensionĿ¼�У����ǿ����ļ��п���Ϊ�ű��ļ�ָ��һ����ͬ��Ŀ¼��
һ����չ�����ļ��ĸ�ʽ��postgresql.conf�ļ���ͬ������һ��parameter_name = value��ֵ���б���ÿ��һ�����������к�#�����ע�͡�ע����κβ��ǵ�һ�ʻ����ֵ�ֵ�������š�
һ�������ļ������������в�����
������չ��SQL�ű��ļ���Ŀ¼�����Ǹ���һ������·�������Ŀ¼��������ڰ�װ��SHAREDIRĿ¼��Ĭ����Ϊ��Ч��ָ��directory = 'extension'��
����չ��Ĭ�ϰ汾�����������CREATE EXTENSION��û��ָ���汾ʱ���ᱻ��װ����һ���������ܿ��Ժ�����������������û�г���VERSIONѡ��ʱ�ǽ��ᵼ��CREATE EXTENSIONʧ�ܣ������ͨ������ϣ����������
һ�����ڸ���չ��ע�ͣ������ַ���������ע�ͻ��ڳ�ʼ������չʱӦ�ã�������չ����ʱ�������ø�ע�ͣ���Ϊ���ܻḲ���û����ӵ�ע�ͣ�����չ��ע��Ҳ����ͨ���ڽű��ļ���д��COMMENT���������á�
�ýű��ļ�ʹ�õ��ַ������롣���ű��ļ������κη� ASCII �ַ�ʱ������ָ����������������ļ����ᱻ�ٶ�Ϊ���ݿ���롣
���������ֵ���������滻�ű��ļ���ÿһ�γ��ֵ�MODULE_PATHNAME��������ã�����������滻��ͨ������ᱻ����Ϊ$libdir/shared_library_name���ҽ���MODULE_PATHNAME������CREATE FUNCTION�����н��� C-���Ժ����Ĵ�������˸ýű��ļ����ذѹ����������Ӳ���������С�
�����չ������������չ����һ���б�������requires = 'foo, bar'������������չ�������������չ��װ��
����������Ϊtrue��Ĭ���������ֻ�г����û��ܹ���������չ���߽������µ�һ���°汾�����������Ϊfalse��ֻ��Ҫ����ִ�а�װ��������߸��½ű�����Ȩ��
���һ����չ�����ڳ�ʼ����֮���������Ķ����ƶ���һ����ͬ��ģʽ�У�������relocatable��Ĭ��ֵ��false��������չ�Dz����ض�λ�ġ������ 36.15.2 ����
�������ֻ��Ϊ�ǿ��ض�λ��չ���á���ǿ����չ�����뵽������ģʽ�ж�������ģʽ�С�ֻ���ڳ�ʼ����һ����չʱ�Ż�ο�schema��������չ����ʱ�򲻻�ο��������������� 36.15.2 ����
������Ҫ�����ļ�extension.control��һ����չ�������ж��������ļ���������extension--version.control�ķ������������ṩ�˶��������ļ������DZ��뱻�����ڽű��ļ���Ŀ¼�С����������ļ���Ñ��Ҫ�����ļ���ͬ�ĸ�ʽ���ڰ�װ����¸���չ�İ汾ʱ��һ�����������ļ������õ��κβ�����������Ҫ�����ļ��е����á�����������directory�Լ�default_version�����ڶ��������ļ������á�
һ����չ��SQL�ű��ļ��ܹ������κ� SQL �����������������BEGIN��COMMIT�ȣ��Լ�������һ���������ִ�е������VACUUM����������Ϊ�ű��ļ��ᱻ��ʽ����һ��������б�ִ�С�
һ����չ��SQL�ű��ļ�Ҳ�ܰ�����\echo��ʼ���У���������չ���ƺ��ԣ�����ע�ͣ�������ű��ļ����͸�psql��������CREATE EXTENSION���루���� 36.15.5 ���е�ʾ���ű��������ֻ���ͨ���������׳��������û�����ֹ��ܣ��û����ܻ�����ذѸ���չ��������Ϊ"��ɢ��"���������һ������չ���룬������״̬�ָ������Ƚ��鷳��
���ܽű��ļ����԰���ָ�������������κ��ַ������ǿ����ļ�Ӧ��ֻ������ ASCII �ַ�����ΪPostgreSQLû�а취֪��һ�������ļ���ʲô���롣ʵ���ϣ������������չ��ע����ʹ�÷� ASCII �ַ�ֻ��һ�����⡣�Ƽ��ķ����Dz�ʹ�ÿ����ļ���comment����������ʹ�ýű��ļ��е�COMMENT ON EXTENSION������ע�͡�
�û�����ϣ������չ�а����Ķ������뵽һ������չ������������IJ�һ����ģʽ�С��������ֿ��ض�λ�ԣ�������֧�ֵļ���
һ����ȫ���ض�λ����չ�����κ�ʱ���ƶ�����һ��ģʽ�У���ʹ���������뵽һ�����ݿ���֮�������ƶ�ͨ��ALTER EXTENSION SET SCHEMA������ɣ���������Զ��ذ����г�Ա�������������µ�ģʽ�С�ͨ����ֻ����չ�������κζ�������ģʽ���ڲ�����ʱ�ſ��������������У�����չ�Ķ������ȫ����ͬһ��ģʽ�У�������Щ�������κ�ģʽ�Ķ�������������ԣ���Ҫ��һ����չ�����ȫ�ɶ�λ�������Ŀ����ļ�������relocatable = true��
һ����չ�����ڰ�װ�������ǿ��ض�λ�ģ����ǰ�װ���Ͳ��ٿ��ض�λ�����͵��������չ�Ľű��ļ���Ҫ��ʽ������Ŀ��ģʽ������Ϊ SQL ��������search_path���ԡ���������һ����չ����������ļ�������relocatable = false������ʹ��@extschema@�ڽű��ļ�������Ŀ��ģʽ���ڽű���ִ��ǰ����������ַ����ij��ֶ������滻Ϊʵ�ʵ�Ŀ��ģʽ�����û�����ʹ��CREATE EXTENSION��SCHEMAѡ������Ŀ��ģʽ����
�����չ�����Ͳ�֧���ض�λ�������Ŀ����ļ�������relocatable = false�����һ�����schemaΪ��Ҫ��Ŀ��ģʽ�����ơ��⽫��ֹʹ��CREATE EXTENSION��SCHEMAѡ���޸�Ŀ��ģʽ��������ָ�����ǺͿ����ļ�����ͬ��ģʽ���������չ��������ģʽ�����ڲ�������ģʽ������ʹ��@extschema@�ķ����滻������ѡ��ͨ���DZ���ġ�@extschema@�滻���������������Ҳ�ǿ��õģ���������ģʽ���Ѿ��������ļ�������������ʹ���ܵ��˺ܴ�����ơ�
����������£��ű��ļ�������search_pathִ�У�������ᱻ����Ϊָ��Ŀ��ģʽ��Ҳ����˵CREATE EXTENSION����Ҳ�ǵ�Ч�Ĺ�����
SET LOCAL search_path TO @extschema@;
������������ű��ļ������Ķ�����뵽Ŀ��ģʽ�С�����ű��ļ�ϣ���������Ըı�search_path���������÷�ͨ���Dz��ܻ�Ó�ġ���CREATE EXTENSION������search_path�ᱻ�ָ���֮ǰ�����á�
��������ļ��и�����schema������Ŀ��ģʽ���ɸò�������������Ŀ��ģʽ��CREATE EXTENSION��SCHEMAѡ�����������������߶�û�и�������õ�ǰĬ�ϵĶ��󴴽�ģʽ���ڵ�����search_path�еĵ�һ��������ʹ����չ�ļ���schema����ʱ�����Ŀ��ģʽ�������ڽ�����������������������������������Ѿ����ڡ�
����ڿ����ļ��е�requires���о����κ��ȵ���չ�����ǵ�Ŀ��ģʽ�ᱻ׷�ӵ�search_path�ij�ʼ�����С�����������չ�Ľű��ļ��ܹ��������ǵĶ���
����һ�������ض�λ����չ�ܹ�����ɢ���ڶ��ģʽ�еĶ���ͨ������ֵ�ý���ͼ�����ⲿʹ�õ����ж��������һ��ģʽ�У��ⱻ��Ϊ�Ǹ���չ��Ŀ��ģʽ������һ�ְ��ſ�������������չ���������з������search_path��Ĭ������һ������
ijЩ��չ�������ñ������а����������û�����չ��װ�����ӻ��޸ĵ����ݡ�ͨ�������һ������һ����չ��һ���֣��ñ��Ķ�������ݶ����ᱻpg_dumpת�������Ƕ���һ�����ñ���˵����ϣ������������Ϊ���κ��û������������޸Ķ���Ҫ��������ת���У��������չ������֮�����Ϊ����ת��֮ǰ��ͬ��
Ҫ���������⣬һ����չ�Ľű��ļ����԰�һ���������ı��������б��Ϊ���ù�ϵ���⽫����pg_dump�Ѹñ��������е����ݣ����������Ķ��壩������ת���С�Ҫ���������ڴ�����������֮����ú���pg_extension_config_dump(regclass, text)
������
CREATE TABLE my_config (key text, value text); CREATE SEQUENCE my_config_seq; SELECT pg_catalog.pg_extension_config_dump('my_config', ''); SELECT pg_catalog.pg_extension_config_dump('my_config_seq', '');
���������ַ���������������ı��������С���serial����bigserial�������������Ҳ���Ա���ǡ�
��pg_extension_config_dump
�ĵڶ���������һ�����ַ���ʱ���ñ���ȫ�����ݶ��ᱻpg_dumpת������ͨ��ֻ���ڱ�����չ�ű�����Ϊ��ʼΪ��ʱ����ȷ������ڱ��л���г�ʼ���ݺ��û��ṩ�����ݣ�pg_extension_config_dump
�ĵڶ��������ṩ��һ��WHERE������ѡ��Ҫ��ת�������ݡ����磬����ܻ���
CREATE TABLE my_config (key text, value text, standard_entry boolean); SELECT pg_catalog.pg_extension_config_dump('my_config', 'WHERE NOT standard_entry');
����ȷ��ֻ����չ�ű�����������standard_entry��Ϊ�档
�������У��ڶ�������pg_extension_config_dump
û��Ӱ�졣
�����ӵ�����������û����ܻ��޸ij�ʼ�ṩ�����ݣ�����ͨ�������ñ��ϴ�����������������������������֤���޸ĵ��лᱻ��ȷ�ر�ǡ�
���ͨ���ٴε���pg_extension_config_dump
���޸���һ�����ñ���صĹ�����������ͨ������һ����չ���½ű����ã�����һ�������Ϊ������һ�����ñ��ķ�������ALTER EXTENSION ... DROP TABLE��������չ���뿪��
ע����Щ��֮��������ϵ����ָ����Щ���� pg_dump ת����˳���ر�أ�pg_dump ������ ��ת�������õı���ת�����ñ������������ϵ���� CREATE EXTENSION ʱ�䣨�������ݱ����� �����У������ģ���״������û�н���������״��������ʱ�����ݽ���Ȼ��ת�������Ǹ�ת���޷��� ֱ�ӻָ����ұ���Ҫ�û��Ľ��롣
��serial����bigserial���������������Ҫ��ֱ�ӱ����ת�����ǵ�״̬��ֻ������ǵĸ���ϵ������ת�����ǵ�״̬��
��չ���Ƶ�һ���ŵ������ṩ�˷���ķ�����������Щ������չ�ж���� SQL ����ĸ��¡�����ͨ��Ϊ��չ�İ�װ�ű���ÿһ�����а汾����һ���汾���ƻ��߰汾��ʵ�ֵġ����⣬�����ϣ���û��ܹ���̬�ذ����ǵ����ݿ��һ���汾���µ���һ���汾����Ӧ���ṩ���½ű�������Ҫ�ĸ��ġ����½ű���������Ñextension--oldversion--newversion.sqlģʽ�����磬foo--1.0--1.1.sql�����Ű���չfoo�İ汾1.0�޸ijɰ汾1.1�������
�ٶ���һ�����ʵĸ��½ű����ã�����ALTER EXTENSION UPDATE����һ���Ѱ�װ����չ���µ�ָ�����°汾�����½ű���������CREATE EXTENSION�ṩ����װ�ű���ͬ�Ļ����У��ر���search_path�ᰴ����ͬ�ķ�ʽ���ã����Ҹýű��������κ��¶���ᱻ�Զ��ؼ��뵽��չ�С�
���һ����չ���ж��������ļ������ڸ��½ű��Ŀ��Ʋ�������Щ����Ŀ��汾��صIJ�����
���»��ƿ��Ա��������һ����Ҫ�������������һ��"��ɢ��"���󼯺�ת���һ����չ������չ���Ʊ����뵽PostgreSQL���� 9.1 ��ʼ��֮ǰ���ܶ��˱�д����չģ��򵥵ش������ָ���δ����Ķ��󡣸���һ���������������������ݿ⣬�����������ܽ���Щ����ת���һ����ȷ�������չ��������ȫ��ɾ��Ȼ����һ��CREATE EXTENSION��һ�ַ����������������֮�������������磬�����һЩ����ʹ������չ�������������ͣ�����в�ͨ��������������ķ����Ǵ���һ������չ��Ȼ��ʹ��ALTER EXTENSION ADD��ÿһ����ǰ�ʹ��ڵĶ����ŵ�����չ����󴴽��ڵ�ǰ��չ�汾�ж�����δ����汾�е��κ��¶���CREATE EXTENSION������FROM old_versionѡ��֧�������������ᵼ������ΪĿ��汾���������İ�װ�ű�������������Ϊextension--old_version--target_version.sql�ĸ��½ű���ѡ����Ϊold_versionʹ�õ���ٰ汾��������չ���ߵĹ���������unpackaged��һ��ϰ���÷���������ж�����ڰ汾��Ҫ���µ���չ���ʹ�ö����ٰ汾��������ʶ���ǡ�
ALTER EXTENSION�ܹ�ִ�и��½ű���������ʵ��һ��Ҫ��ĸ��¡����磬���ֻ��foo--1.0--1.1.sql��foo--1.1--2.0.sql���ã���ǰ��װ��1.0�汾����Ҫ����µ��汾2.0��ALTER EXTENSION������Ӧ�����ǡ�
PostgreSQL�����ٶ��κ��йذ汾���Ƶ����ʣ����磬����֪��1.1�Ƿ����1.0���档��ֻ��ƥ����õİ汾���Ʋ�������Ҫ��Ӧ�����ٸ��½ű���·�����У�һ���汾����ʵ���Ͽ����Dz���--����ǰ�����׺-���ַ�������
��ʱ�ṩ"����"�ű�Ҳ���ã�����foo--1.1--1.0.sql�����Ѱ汾1.1��صĸı�ָ�Ô״���������������Ҫ���Ľ����ű�������Ӧ�õĿ����ԣ���Ϊ����õ�һ���϶̵�·����Σ�յ�����ǣ���һ�����������汾��"����·��"���½ű�����һ���������ÿ���·����ʼ��Ľ����ű�����Ӧ�ý���Ȼ����Ӧ�ÿ���·�����ܱ�һ������һ���汾��Ҫ���ٵIJ��衣��������汾ɾ�����κβ�������Ķ����⽫��õ����벻���Ľ����
Ҫ�������֮��ĸ���·������ʹ��������
SELECT * FROM pg_extension_update_paths('extension_name');
���Ϊָ������չ��ʾ��֪��ÿһ�������ֵİ汾���ԣ�ÿһ���汾���Ի�����һ����Դ�汾��Ŀ��汾�ĸ���·�����У����û�п��õĸ���·�����ⲿ����ϢΪNULL����·����ʾΪ��--�ָ������ı���ʽ��������ϲ�������ʽ������ʹ��regexp_split_to_array(path,'--')��
������һ��ֻ��SQL����չ���������ӣ�һ������Ԫ�ص�������ͣ������������IJۣ�����Ϊ"k"��"v"���д洢�κ����͵�ֵ�����ı�ֵ�ᱻ�Զ�ǿ��Ϊ�ı����д洢��
�ű��ļ�pair--1.0.sql��������������
-- ����ű����� psql ������ CREATE EXTENSION ִ�У��򱨴� \echo Use "CREATE EXTENSION pair" to load this file. \quit CREATE TYPE pair AS ( k text, v text ); CREATE OR REPLACE FUNCTION pair(anyelement, text) RETURNS pair LANGUAGE SQL AS 'SELECT ROW($1, $2)::pair'; CREATE OR REPLACE FUNCTION pair(text, anyelement) RETURNS pair LANGUAGE SQL AS 'SELECT ROW($1, $2)::pair'; CREATE OR REPLACE FUNCTION pair(anyelement, anyelement) RETURNS pair LANGUAGE SQL AS 'SELECT ROW($1, $2)::pair'; CREATE OR REPLACE FUNCTION pair(text, text) RETURNS pair LANGUAGE SQL AS 'SELECT ROW($1, $2)::pair;'; CREATE OPERATOR ~> (LEFTARG = text, RIGHTARG = anyelement, PROCEDURE = pair); CREATE OPERATOR ~> (LEFTARG = anyelement, RIGHTARG = text, PROCEDURE = pair); CREATE OPERATOR ~> (LEFTARG = anyelement, RIGHTARG = anyelement, PROCEDURE = pair); CREATE OPERATOR ~> (LEFTARG = text, RIGHTARG = text, PROCEDURE = pair);
�����ļ�pair.control��������������
# pair ��չ comment = 'A key/value pair data type' default_version = '1.0' relocatable = true
��Ȼ�㼸��������Ҫһ�� makefile ����װ�������ļ�����ȷ��Ŀ¼���㻹�ǿ���ʹ��һ��Makefile��
EXTENSION = pair DATA = pair--1.0.sql PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS)
��� makefile ������PGXS�������� 36.16 ��������������make install���ѿ��ƺͽű��ļ���װ��pg_config�������ȷ��Ŀ¼�С�
һ���ļ�����װ��ʹ��CREATE EXTENSION����Ϳ��԰Ѷ������뵽�κ��ض������ݿ��С�
��һҳ | ��ʼҳ | ��һҳ |
�����Ľӿ���չ | ��һ�� | ��չ�Ĺ���������ʩ |