Zmiany pomiędzy wersją początkową i wersją 1 dla UserGuide/AdvancedConfiguration/CustomRegisters/Import

Pokaż
Ignoruj:
Data i czas:
05/01/14 13:32:16 (10 years temu)
Autor:
JP (IP: 78.31.141.182)
Komentarz:

--

Legend:

Bez zmian
Dodane
Usunięte
Zmienione
  • UserGuide/AdvancedConfiguration/CustomRegisters/Import

    v1 v1  
     1= Import rejestrów = 
     2 
     31. tworzymy ręcznie tabelę (rejestr) w bazie w schemacie ''cregisters'' z dziedziczeniem po ''cregisters.register_entry''. '''Nazwa tabeli musi posiadać przedrostek "creg_"''' [[BR]] 
     4 przykład: 
     5{{{ 
     6CREATE TABLE cregisters.creg_przekaz ( 
     7  id INT NOT NULL , 
     8  nazwisko VARCHAR(50) NULL , 
     9  imie VARCHAR(50) NULL , 
     10  ulica VARCHAR(50) NULL , 
     11  nr_domu VARCHAR(50) NULL , 
     12  nr_mieszkania VARCHAR(50) NULL , 
     13  uwagi TEXT 
     14) 
     15INHERITS (cregisters.register_entry)  
     16WITH (OIDS=FALSE); 
     17}}} 
     18 Dane (rekordy) możemy załadować w dowolnym momencie. 
     19 
     202. 
     21 
     22{{{ 
     23 
     24create or replace function my_exec1(text) returns void as $body$ 
     25begin 
     26execute $1; 
     27end; 
     28$body$ language plpgsql; 
     29 
     30 
     31CREATE OR REPLACE FUNCTION creg_get_field_type(text) RETURNS text AS $$ 
     32SELECT CASE $1  
     33        WHEN 'bool' THEN 'bool' 
     34        WHEN 'timestamp' THEN 'datetime' 
     35        WHEN 'numeric' THEN 'text' 
     36        WHEN 'int2' THEN 'integer' 
     37        WHEN 'int4' THEN 'integer' 
     38        WHEN 'int8' THEN 'integer' 
     39        WHEN 'float' THEN 'float' 
     40        WHEN 'float8' THEN 'float' 
     41        WHEN 'varchar' THEN 'string' 
     42        WHEN 'timestamp' THEN 'datetime' 
     43        WHEN 'timestamptz' THEN 'datetime' 
     44        ELSE $1 
     45        END; 
     46$$ LANGUAGE 'sql' STRICT IMMUTABLE; 
     47 
     48 
     49SELECT my_exec1('INSERT INTO cregisters.register (name__,tabnam,label_) VALUES ('''||replace(tablename,'creg_','')||''','''||tablename||''','''||replace(tablename,'creg_','')||''');') 
     50FROM pg_tables  
     51WHERE schemaname = 'cregisters' AND NOT EXISTS (SELECT 1 FROM cregisters.register WHERE tabnam = tablename) AND tablename ~ '^creg_'; 
     52 
     53 
     54SELECT my_exec1('INSERT INTO cregisters.register_fields (cregid,name__,label1,label2,type__) VALUES ('||cregid||','''||name__||''','''||name__||''','''||name__||''','''||type__||''');') 
     55FROM ( 
     56        SELECT reg.id____ as cregid, lower(a.attname::text) as name__, creg_get_field_type(typ.typname) as type__ 
     57        FROM pg_attribute a  
     58        LEFT JOIN pg_type typ ON typ.oid = a.atttypid 
     59        LEFT JOIN pg_index p ON p.indrelid = a.attrelid AND a.attnum = ANY(p.indkey) 
     60        LEFT JOIN pg_description d ON d.objoid  = a.attrelid AND d.objsubid = a.attnum 
     61        LEFT JOIN pg_attrdef f ON f.adrelid = a.attrelid  AND f.adnum = a.attnum 
     62        LEFT JOIN pg_inherits inh ON (inh.inhrelid = a.attrelid) 
     63        LEFT JOIN cregisters.register reg ON (('cregisters.' || reg.tabnam) = (inh.inhrelid::regclass)::text) 
     64        WHERE reg.id____ IS NOT NULL AND a.attnum > 0 AND NOT a.attisdropped AND inh.inhparent = 'cregisters.register_entry'::regclass AND attislocal IS TRUE 
     65                AND NOT EXISTS (SELECT 1 FROM cregisters.register_fields rf WHERE rf.cregid = reg.id____) 
     66        ORDER BY reg.id____, a.attnum 
     67) bb 
     68; 
     69 
     70SELECT my_exec1('GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE ' || (inhrelid::regclass)::text || ' TO http;') 
     71FROM pg_inherits 
     72WHERE inhparent = 'cregisters.register_entry'::regclass; 
     73 
     74 
     75drop function my_exec1(text); 
     76drop function creg_get_field_type(text); 
     77 
     78}}}