diff --git a/docs/en_US/database_dialog.rst b/docs/en_US/database_dialog.rst index 36939a1..89f92ac 100644 --- a/docs/en_US/database_dialog.rst +++ b/docs/en_US/database_dialog.rst @@ -97,6 +97,18 @@ Follow these steps to add additional parameter value definitions; to discard a parameter, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup. +Click the *Advanced* tab to continue. +.. image:: images/database_advanced.png + :alt: Database dialog advanced tab + :align: center + +Use the *Advanced* tab to set advanced parameters for the database. + +* Use *Schema restriction* field to provide a SQL restriction that will be used +against the pg_namespace table to limit the schemas that you see. For +example, you might enter: *public* so that only *public* are shown in the pgAdmin browser. +Separate entries with a comma or tab as you type + Click the *SQL* tab to continue. Your entries in the *Database* dialog generate a SQL command (see an example diff --git a/docs/en_US/images/database_advanced.png b/docs/en_US/images/database_advanced.png new file mode 100644 index 0000000000000000000000000000000000000000..5f10ef529be12395c88dae32ac9c73df970b4ae8 GIT binary patch literal 118337 zcma&N1y~%-w>Jm`2o@yR;O;iKySpVYxLa^{cNjc4gkT{F?(Q%+1czY3-2=e_J9+>2 z-tX@2OLph!p026xs_Hsb$A0Hbw3>?SD-=Q$7#NsW@^VrdFfa&U7#MhSBt&S<aZi#>UI zyS^enc&y3JI?UUAdW#lL84d$O{bGYTUqTJWnG?n&Mwkn3dW`OaL!F-9_ z=SR^ekBPxVpHT*JrSJ&3=7{o?7#+Wh;oNn6&?r$bX`4aUAVFu-?7)HHae22pW1-qDkUM5CWTqj4lv zNle%?=S$+Fc=A+|+z%j`1|dpuTQ(*&w5{0G7@9T^O9e9yowUtC=<(~b`%T{9CPV6N zYK*feoJ~_i7p$0`9`0r{drF%c9;2fVWk4=*!A89_vda2_p@Ijw`c*_zPHFW54_1+{ zn5-(VL`kWbz^YSy(N;SbvIDjo-LYb5KSF?Aa0&}GUFM0X)b<9i49?Omso~CoiML>| zoTlF)S{7X=$gOi?;e?8kzlQDq(e~|89g9BXPBm0_Z2Fb?uLQiSiNO~M6s$0lHyB6bJWfd_nQ*oCw7FTHepUZnLonF82j0OD?tu`_ZZn1tX7 z%mpDQo)ccoV|?EpGYP?U*mXv6=_Y=84az6lGf6Bz#Xb2TB%8cEBX z=xkWtWz@U%AKl+-d1qYeol9M=BL!v0x|(gb)T*FoN53x0>pmP*ViyRb@V` zBl7R_EpgHz(TDSTk=fKYP4g|DErB!f!4i{o5?6?uDrw5;iY|TO%;*m&Q6Ql&#y7yU z$ks?fm;=X{9qy}`#iw$y46Dw)o!)k0`s2ex!3Syl->^Y>kT|r<|Y*c5{LoWgrEa z8d`C_%x8pypm?!G`j>GsDc_K-(FG7#Wbi*Kep9F;T#1`29GG<7d;2C_MAjD=v~R35 zO6c0V0Kkv!ovOA|iXVdvSD};keco12Q3#9#qyaTTtA{s0UkR7B@qIv(C5orneB{JQ*!vT34#p`IL0;);; z69|_nt23fAyYmZYw(86U6+gKniX^#D)Y=;44Do$*xXB9gw(_m=19ItdBt@Rk8R9O6 z5{s+QDGt$WpdCU#pjKKNTSE}a}{#^1xnmc4%XyG%RZ zQ|vUvFkM7?O+2r3Vm`0js5nsWsU;u*w%52wJV!jZ+ceYw(F*MYVKN#CTJNjy2voF2 z!Vf^d!7e}p8mnYi#>4`IZ)gulNytxl4t9wfj=Kib6Sxx*5&9C808}|EI7Cd#Oih(u z(k5h1=npSXv_T$#eWplOQPzV66z-C&ue@zJW~lq5%rz`)=C{5Mz0^#zX|nmS?=p=z z-D=sC8M_Fo{bETprjq6UikpxS_y$;KxA&OeII8Z7e+hp{u%kCNk^Kt<(v{L3WS-N_ zsoJYC*Np(}=vLGSy<4>DuR^Iw29?(cSYClGMmMT1bW+Q-v>NN1-QU+w`NXcPe_rNM=eBSahqCOT8AEie6C)jXUXfYdX2zUL`fp1w^5o@BCWoyyRD9{ox)R2 zTYE_~RM|3*+v^(?XP+;cHspVS&vG^w_im>~W)-*UCl4cddws#beyy^s=K1;gZ;7~z zc z1F*&(#8`g)8O0RA0?{5_13~ZQWoT(AS=d4Zl4L`q&^n*13x6v=o5YIbcK%DrHJ9Jb zwM}CtAdopo2c*|z;^lJFa^{Q0gT;?kkF}Dtn#4(&U5KPUsXkIzamnljXZWhpx9)UL zr%XKxT$_? zMn(r#%E)wLOiJQoaMs?)F8WqfEZ>-to18kt!r;R|z`)JmsM)KbUGxM@HF?bdT*(p{e#csdl)D7810U#5Qn_u>%ggCB?-%SI~Ah| z4}1aKopiD3^&+KuUASdfLiiC#+Q@>^!3DSlbc?}@Of`8s@H=Ir`#3LSnfeS~SD5E+ zSvb5o`Lx{V?d&ahad)A4`3o-*l>-%B{#CK})Z9>7N{O;Vdh@V?#aD($O)b^^G})0x zCd__#X|sGRp|(720ftV^RW=mHuZ%vt+!hDHHi*+j)8ne1nH|=5DH~B6WL7^o;W>3J zbtiIoFCUr5%UEiY7IkX%b{58UfF))QTg$nZpD!BxVWu;BvhMx6|b?;7nF0W$eI#9iQqXTO{i_O{{F=9F@mdFAWrJCv`3CcTd18_`kxAZOU9r zmuk|R8~w-@N|t{em5k<994D-o5Hn%VY5;DhUf$w*P!5*;MBX-c4>{@DEI z&~&HFgU<%e?o9P`a0y1w1K zGS^BUS8ji`Gm_0F-JATH5S8 znH@{FAAUd1M9yHS`jiAv`o^R_W*We_ zA;TFH{#i=gc^oVN$987_#C9(mZ7Tpmo`-rJF%}?sOJ!vkMrauc1|F6W1_4@vg`Og? zME_Hkfu)Ce@lQP*3{0dA4E%pRqXNDD`6NQmKW+YVeUTgi^Ah^&HT3lQ2>0JlBY;1? z`0p~jIrJWkxTd7MJoKt*=3-&t;A-vYrczwA2dzMMlGAa8fx)BsbHd7NP@h5jU$A)t zasw$V379$BvznMYnp&`W**pE|2S&(C09v%Sa5EwIvbS?^74Qa`b(J7+Re>LfQ`-5)05Sc zlhx71ijAG0pPvoL!N$SC0)2wT)!V_%#EZqjmFhp8{C7W67OrM4HcoCfjt=C1`ZY0i zbaxY`r2I3`|9t-Qo)%s<|7Roz*Z-Opbb@Su?y#}50@?njZ)j7YKeYmCHeMEXASoMr zD9xZ_h_G{U0EPZ(@c+8?e}?=|)3>e`E|QM+(3Wl@|A*@T)%btk{C_t5XH1>{H6}X; z*Z&^#f8F}8rb29g=KjBE@gG9}QwycE2#OHf|E!t_N}H;~4Rj%iZKPD+K(Ekk_U8k~ z0sW%?&lOsRP5h|*g z#RV#ZX{#Iik{x2Q`YPnP-YNB2&t!bAmX5<^_mJ*`i$X%7mrGh*f1Kd;omgIM_r2dd zKiMSOK0Y}bJsNfN+#L__y;kbYX};tvph$5>Ejwt@Gaf6KLM~`h;u*)2OHs^I#+KTO zK^Z}rOQOjhOeev`E=^HPV;U_+LQfgXk0qa?OVGd{PZ=ZO7?jy&3E5!LHYAkVDsip; zV$(b5mD?-)wv6|k$y?$)9l0R*e?8{V;a;V3*S2llej&Ul{MmIr_>-&ojvGfFb1ju= zzOo;?Ny1fK{p+%a+vwIgVOhtbM2ZFevWy~jxNP=$NY918&Z1ew;^jz;2CoW=hr>T&a zNNCMyu$kkHye&F!{RUYe;{xpU|B)|3fnHqQrY+8ZCz zMJ^GWhL285l~$#%=XgDr^~LusWba+~r{S%~Zf|qE4JE)*->fDQ(CLaOzDb$aPzXSAAwmJ0hq#$$t&L){rGnhLG4F+7-A2YlLWwr_m>)YH0 zb6*oApePKLTPENqL^bsk#rJ8PK5dQ!wW7y zW1kAO{Jq?f^o;qVR7abe_kAzihM;Q!>(thD|EBA$r26dknNC6K@+TwLOxJB({C5VK zpJjPk*=Y2FmeA*G-=ZGkk}?T2r9>9KZ!T~bWE4&}G%Gt=%*zgUCinjOeXp_Y0)X!% zDbABlt?L>n>CBtmmHy>z%=QHC4@NRX%V27 zAlW)z$H4bANesm~l#BM-egvUdYyB+$w!Qw@bDss_@)a^QyxHE<{-W`Cj~5$?wqLqP zwdDaR)uI=ntI)-Dy)6(Dv2u_#p3PR?#4di1{~02ZnTA`jxe!2f=shrea)oMee%QP$ z&Z8~Udo-~tkjnXsjw#;fm{S+oeI#QcwnkE&w;?{)xtcqTmrn*1@SeeU*$%maIB!)N zBDH(-sNdt&Y?7%?kPjqA`R?FYk#S^cDAka-OqoRa9jj7`)j8Ali$z-I{J3)SP-gtI z`)rsN^J|=i`S3xiMUfJbcdjUo!_m$%d-w;X5O}8XnQd8H(A`>kwV1&~Ff@X=D42Q*McSxV% zJlF3+$9`c zHe{CNY|As7dD|IfdM62SccyB-)9H3r!0rD{Ee7}R2PPFJV_Y@KK2b1hX5L3Roz$%n zMItG$ZX8)Qrq!k6gqq)d57`OAQ8+@FVrUsN!?)Mv%sK~r7wuxg;ntN;Tw5P&m4w(zB(dWoxWZHp@ zc=U(g))s%St`-#vs5^e#P@RQyR`Y$shxa;rUEFlPDk*(VdS_r~fZX*RvqDt(g+_nP z7SFrk9Ht1{f1e9w(PDp2c*r97CQET1`VTj$ldF% z?n67MhnD+(Nt4}W@7pYx4JhqbJNg2cn1yqXS=zy~oo*NUF*7fAJzV3S-EUthG52FF ztm2TXhV-R}hnG?{MU@4|Qt^%?%?%9|35sHihaCD2vcQ*1%~V@4u^u}O`KVT$<_RQF z30FKjaLi~JUux8_K<}+)CM@QW&Lk`p;AKaB!LZ`B?F~LOE&@#2sP+{Do zTK)4Qe%PgJvrIYc6NL)xM6RUzyPW8dCi!PJofsT!uv!{gfu>gMC+3=I)GRGaN_#s_ zhEZKo=1~7?q2eiX?0cUgyWQc~IhRNUhk^c0U@jXKKEWHEgcIzoVWh(?Pg{w`4`asX zw*}RqaQ%F$Tn-uhiU?+dnZXs-A#63x)+^2LW*K!lOpD9(n;9){i8!_e{$0-gm;CL@ zqJS}JazE6XYEZVdnf;18vn?k!u0?0W=MhuAbf{tKx>GhG>CZ=tmAuNGZ(bjN*J38*9nH9HZe-!v=8HsOCagH?@Nz+Zzo;TUM*4Nm?F2q@h zdHk*fIAV%ZWperh%?bxBK8Og63864bgP z_74`BvQrxRoJ%j74CG=``STn}S1%;}Ap7g9KEjg|243u=X-}e)eCN-DjK}j~##K*; znbmS#hg56E)ta)u?s$6i+Mjo%+Kni<_c6fge@;gIr(TT?-ZD^RqPZj})miX{b52cx z%i(4~_?PANqNkCg4jQUiSZ1xIVu?zwjlq%i8OGn%W(FU&mLme!S+<_TqnjCQpJ|`m z$VFOn`k0yR*rC(newclbg3S!oDQ8}2_GBui}V6((qP-#l@p zsCbtYoL_7+5yQ3=eV#xKuBZJ=Ur^dEHQ1-%#>U1%N$YQ;YGvZLAx}5_Enl)doE^c; zQ0cGSw+1iK4Pc382FFH0S_5s^psi2%cZWat9^=*uu|+lN-cXFMo7? z<%_Y%2Hm{#a+QXMwv6twuz@&)^Z;4nn{;?^*Lw!dt;hS*MrHnuD5@f(&H#t|U!70w zt7a#^!9S0ewBv;?EaB-H?!bX0?=7Ihc0GcDALy&SqNtyZavFv7kqK zya7+*_@NzrZi^Vam30L?c}>T~Fq6xSx-9>Bee>M(L3j(P=dyDHgXfBS`ccD@gM;t1 zGVj%SRIdo)v&#;ehF1bQ%qmE46uo6izbU zYJj9=z(xG%z{LMwJz!|10u~a2SrH2ZVFCd!#dNbPot1%|DSMrno}&WlW|Phjq?MuypUb zYyg$(s`u^?gvjwoYGd#l-|mNkFYsnfnE?I`!dvU*%X%#Oq}C@q-ys#>yxnE(_i`;V z9(3U|X^a3#KjEtxO^e5e+o@tjeDAF!**4K1+;AP>Pz@mKi`Oa7$tNx*IR0+HtO8Vl zj32uM7MmorUk}wet{Jj6{g7CES6c3-t->tR^652r&1W5vK#+qs9}wT((vv1gLLqqM zymP?V@yTT#uN#mEj9#AkqPgNeUvE2~)x<4ri2_j;&m8y{Q3jPv!FN$3Jk1TwJ zUNlVBbW^{l8pp*S-N8(Zgt3!R~9AiY$?eviAppGi=a-+pnrk2u%z z%kG;`*$y$$Rq}@xGq53L2wTCZ;4{kbAhb#B4O@`_`D|ov| z?NR$L&u%_5#m8Mt_t2#4Q#P)6=zVA1Wg_sNhVvp0d^rE2)V(o8m-lnAM<8;P96eNi zaE>D%%v8}t2^qb1e$Jv-GlKuG>_QuBOC?=Gv``r`3fgvHooXg@uAyYx>h|M(Z0lK&_3c?NhOgpYkz96}c9wCDQp$3Kact~&sm&tjkA!255cWRPWow%d zTM%hHa)5{35fd-l!7Cnn z2$Qx-N-C4($k9Hw#l_3Yk@py@i580ZgpFBg$KO4Z1G0}PiS|2Bh|u28*|#Vj&b7y; z@w@G*ozlV~uj|5wFfP+mvqVq`Wfj|I8QWDbsHt$Ul_{^s!_L(qRc*0seT9Xifh*HL z=b=RVOcWn_(fd$k9bU{X!4kqw`$>|BVle9-P4JO_H-~EXgKx!>9a=XZLj;j8F^qlW zYy$$wdCl)~tbsv(#B_$p4pXfW$W{hc71*b4#5g7t@^TujX#!;@eIf4V6KW7tyH*`! z2Jb%SY>D|}29a&Nz!0i3wovAh2`RF0=9u105H)Og+B9F)SfT|~4wr@4SL4S~B`uW2 zQN1v|;neE(dNt_h6{H6w1m2&ls;jllIC6eX}FDl8h$BuXCm!w zsTQ8ax36z)_h*V*%W6*$r`%Uor|M;mbQ*VMrlcEL>Kvx^5H?R5G8>7ZY7XD2`Z9_t zK9Q-iZK@=6`;a1%c%zX5B`YHv2b|)a67tR^P-Etmw7lStc)^psaMh?RIkOP%sT`k! zFYI|ES~4|uMd2CXyGX5;As*`fu_77=>-}syviRT!CnMO{cc?=xAd+fPoI?sc(ThQ< zjsQ##lQ@!?xt*_6-iG9Th5EKc7X^0MGrc}^hoP5nBhDkSHO|XwPUwd@=4nEeLl5iK zameY<87f!OKekd-JszV_X9)|~CH5jHGw}iv9Gkb(%-ss@eY?G8zm|dQ3aX>~C#UoX zWJ9W5rC?t`#fw>KJxV2#vV{rMj5F7%=dj|>k})4DXs&TPhqLl-bGhZfP0(&KFW0S4 znzLV$Z@tbf_8)LBk}PqsS@hR0oilI?>5O~ua4F6(wy{aks-o46=%MHvuZxAnkBLsp zUjWyn^jOdeqbZ{8RX>SEjInmyMmnW*|;uKYtH=MBg$qW=L+0?S9p+j3S~9b5n&+k4F=tp z@M_JNe0;%E92G8yl@=R>O>b9-d}MrodE`jA8skcGfBEd4S8T|T#5qPtMYA3frpM;NWwi`L~ba>`WF%sFH)Yrj^YbNYi4UBNyzurIxD3AR|)? z9E%N!Mj4{sDlDSo1Nfac(o1e>^EUHos$ICx*o48BsvmVHn;7~`yDp*Aoi)sLW|uOp z<&cT7CQ^4e?3LH7F{H0CWj8l7u%GS=Ilsg(qPJhFPd)DND`FLtskhzg97$(M zD^NaQ76~G+XjqD$R>ddd>(utGAK^Ous@sDf_9`^hF-zKmBe2HaV?2pfsNq~?NA(jE zwNlBp8S!&E`I1KMi}mswQ}(D#<2DHdvl3)UCJ#IaEupLyWc9mO2nuApYGILJml?cN zXR|pjrrBHsxLr==2>7|F!n|tN>TkZucC_P%#S5{3SsNhhe2VcqyRLcWLIVZu<3BgM~I%G zW|pQb>+H=H=KVaVZT`9J#7ReL)|vzKoWtQ2UmaByO(e(z&vTUA*sZv|Zlf^j1pOw) zICEZC(7-|ag{#M##E!#)iX4)^m#tJQ0B<%!B$B3>YJbdB@=A{A6Q}JWwdkg)#Zpa9 zOIP@dFtZyHnP!`A=Im;=GF9F0b$n-$d&DZHpwHt&4YP~@{EO2ZEmcU;GyXo8Bb+-0 zfT<@(Fs8{C1s`MmCNw(b1*+ND`j%NzgR-58UCL^l_ojO0*|n1ua*hXbmw|NShy9-O zBV=Q%tM2zeodBP|A50KcpJiWsVY|d@$*7 z`L1Sd+FtZoH_E8l9r-Z4=Cu8nVe`}DeXlk9(`0`WgrmqV%pP5O4`@?kPtges%)eA2 zgHR|}r2Om4i;YmIRez?mEBT9 zxt=3qI!>w9SQ74tsPjM{SyN(=`&mhf3_eb<{{|crW;!o%ReP;QL@X+*{rBr6t@640 zu{IhN0IjTKP@XYZBU-I9lUt*P03%%dd$!cs^h6QNrA3-4T|x z-43RNS#;!4Hx*f%r5sw1dGhd63dEODU-WHEtBM*xt;F^WYa*1$aAsv&EU@!(zGS4& zTF05H-)^oa9?n||LsQWyn*If~GqfeV2H11?Nj!JH$D2(A#V}TbmO-dpxy=3!7o1XH zm-QnDXRMrLsLf=_K>7*;J|Jq0o=T`vp68D-^J4)o5yKvG+h9DRPq$Yl3Z#lTUSG8dcW)pu>IE-ui*P{CK$3y87PCje zA6gviw`ULccx?|8)VTDcnbqs2moNQHo-6mo6+-M2&M9;1;g0HTJ?&_%<%_UJ>c-k< z&iG7-68T3^PGaNrV2V(1Wm)Iq@KPX3KGeDWG5JS#D{qIDcTf>jZC|FD5LLxpl#^O> zGF$XEM6wb?XB}HDE8Im2?%9lV;Fn-0b&m|^TQEkB;B(BkwoSps6J(t#G%yi)PjaEi z(HoG1;Uu{@blC4FLPhc%WG&|Zn(uZiWjoXA0|Uq#3Mc~`m~pOGJdL2ngdWOq1^+54 zWF$?T#bW~)X4ZI;26C@qFQ^G|rX~>7#u;bmC&UD=1?(g4uLQbU5$JP7O zv}k3^)uB%1Q|E9KRbzJE(%H@m)FP15ubZ+07tDpHQh9zrSOmvzs$D zAx=xzk90q$N)XzB*EuSE3zQ+i)Rt@{iekc%xR!enkdNSz?-!*S(;%OY)qi1X#L(TO z_DEeTu@6vvW>EH1~WPLUB%%UmLnA&PH- z*LV;W@;SKNpfc2>?x%$SBNnivHcrE8M>GpKFYrd<)_h8imx1Kr6}}6dIt_lXUM%t{ zS~|vRfYu$_g8a3>)^M_PcNT7s1%(M-51BrGj@y)cN0}~y8P5AU_=X$#yq~-HY!4UERoi3HI+BM3O)mohr%*)eVUOnf5M{hZI=6_Q89o-%aCr zYY&p9Vhj5T#KA6|Ts_l8x(y%gBAHjwT~UW9^R8@7$a~p6BhO%vXE1`d4>n8&6Dgp+ zZC#r}HfXuS-?y#wzm=PcwqfbJOARE<=H%by>zr^7dt49AS-Ww{heI~Ia zHl^_m%%yLNo2|uu+ZA+l_}>q!%aYJwvi8ETS1_EhkT5U_}$sBRfW#Oc46`X7N4pc&Az`zQ@1MR-B9;L8lx@H`|f08U*$Jv zNX#kJ2~`B7SH1jIo11MQf+mOL(H=9`+~@4c0Hm%i>`TM3j3n3kY@FC~ZkqzF{n~?M5Vnr%cQx?A0(YXffJT7n?Wng7se3+?~U0IK_jDY#<>8A@5G?;0+ zPUcDx|N2@)^x&@VO`7SXQ;Pj&@Jr~^%vqu%yV?1a&Q13FiH_g2$J1Z&d|!cPv`}Cg ze#G=Okso0fGmrghvsgYLa}iF0o}%2q-}cF6E^QPCJfFrn=J6ct&xHuvRFc7Eqp=tewf^MQ z6$D#4_DXu;lNxXwJGOSNKR?y^1^i}_JGsb-GbP%HECQH-ri0&I)P z5Q5d1g(>Rv@jI_v!vh!7k7Y})oQu}A{>Aq94nyY4tP(*X&RBfQ($DZeGHJ zfO9?r{&*!If&?$;qUqR48NKeBCmEs^%SvQaGtVEd1Mx<)DN%P-oWBTo9?~7U#nE~& zCB?Olkc)LUp~)#dA0TlTgZ7_58%XFWp6{;x!t5cAg~%nud8-p3e;^K&5hl>WfJK3n zMlvZr8fvBfh|Wf)uE-nuJu5V)XltEi65!j zhUeQJ`%}^lt3I}!W6wDQ{{Vv&#v$hg{fap>)x&+?Vsh)9$ECw#rHiCOoXK$nhd{WS zDkOp}TAIL$yp)No=N9pw*o_<%%x9ak2I0zXIEfoU%#2OYQZ~f6ARfCaIAF;teY$5X z-9M0Jun!cSJ@1i@r9y>zp!f|O4ggLSgv~M{6gpz7c?Q7z(ibcL=aAh$&@;ITIRgN{ zj)P}p^B2S)sU5&keQ7`(4Us_IF$W4%=?FJ4w?%wYC)19Kgv?uGon z2ZBHQ!iB?|agD|fEV|PVzd8lqcJ248(4&WKRv64V1NV9tO#VMQ5QIjxK6G{=_gM$w z$53EG|9PPqQ+p`iy|74F>ZH`&bTTf?r1UJ`L!lFPxP0TX1E&vqD5=r4a5Z`<5shp2 zYD?r6U^W~3Z2`Y^;u$cpcME62jECb+Dm-27Caz_UZP3{WDZg6!k@D~OpqUAvf z*GR}*DX9Q8_^8Us!a|&=f z$)@AW-m6)BP#sv7F#CN$571i&3dK&y4R_XVRPO%&vGnrYd~S-tkS%=;^Od)4SL63d zZ^{CzO+(Io4mE%kt+f*<|L(v2$Eg$hBa|n0x1fR5mf|Q>2>)b8h_hH~>2rA6pL(@O z_zkERUeNSW4}}gO%L7?$0YI_9!?UB>;lH)R#FRsUtZG-Q1ibXbL1J&jp#?;q&?iQP zu+szo!eEJFzyEOebxw1EVay9>&{9zdJN0IcaoJ(vOeA{_zHCQqtq7QgYGwX-hu&$b z^{yQNa(xE+`6FfPv&A}$bFibtY3cB+=-P>{uKC=>lCqD+nd4e3WxE0TfWK{*lLsR=H!3hu`dqWJlO+>3{)wKR-{{*T6qwL747Ln-~d_1>70n zQw3^Wn(}df3a_Tvehw4-N0c9=h*3b-(C033FbuFSi`BVM0s z=23%e|28;i1UW2(ea3_ilkNd9K-(K?j267`JJg>2vBbD7%}B;hN|GeVgt6 z^q0L__7)xm84~nEdc$d>HOVo~JwA4R=^uoBhoLcBW_u{Q(jsK}KM2}q za94qJta(oua*b&}3IWhKsI1ZOC%3*uF_8QJM)5NLKY9zxRX%^N|7Ie3Ajubnj+W^| z1QdeBgS5{jD#k$L1Vhm9ss%K@nhM1e%KWXWl5`(7$(}%uSCxVC38cbXv)V@XMH=%R zrqFyV`gsG-+-2thk{W1~72~63iAv1?sqf%K;G^sQd}UsOV_E8i=+pAbizb^=b-CIp@L*A)p6SmHr*izQxyh+zbco7lw|*CjW}^*2$;a-ydQt0FhS%X zcFDG~eG3};zg)64-ClcoY}9w^MmYKQ^!qf>qIQf&4|~@7y%~=OSpxnseXU-jL-k!f zwPkgLb0IC9W4oyIc=H{pHstLtF+-~Z=f_VM8T`3jKQt>n1mi`G6LVbp4ELiC=sm`B z_-o9EUhl88dd}8EE>}wO0uJ0>c7&A?QgK4fzZvA7wm zrSFZ$uKU>n)H{9_vkfK5k}f7^>DREZwf{`^JM~>lxjtSR3B?ehC$g_o9}=>a41va} zRd*)x^1i=`I{XoKXbD~2)LwK!CEfaWsaa`B)Zd7aAI>60-$M~3RxNHcS_+tr#v4?l zn-F668TFdmo$P@ru4_cnozCm}O8ya3CL*?83V@NnJ9PlaPm@i% z<%%uat|r=VlW6Vp7bAxwk${usW|uD5mq>lYIaE2KsHG{HB%vd-vc|=P*M7SjOBN?R z{WXVLzqhT{_?y(xWxAWxfoaS|G)NFAGE}1<`1|VOr1f+d8f4ec_Psiw5j?62B`V2- zMy=s`KbXSmzCbHIX}eV6or~-ygu8e}z#-LfnS0t)gObV~@Zfd3!`r#`8T>;m1+ zxC+Bwe*~Si7JQqr5O&JyHvGm^NOeq~r2!gjv-ZTN%%AAFkKVhvyJa^qNnv79;#P-q z<*_uI9n8T#c;LuaM6~IKJ~l(H{7yf_Je7@usswsi8kZ^44LmZL?x3;Pbk1?UUSVq0 zEH3#~pF@`0AE6jqR-*Shg=B=GI6_66x{>aDWydT(D2~3Ad~nGQMSP{;FUFj1>%X*VstV6Ot>W17hAov=v=&hMy%fC>e|u7+aCM&g zK@gl2&$oe;{_3h{9)zdBUhAgMqYB5?!7UzeQSwrM`+J=O%`ZcbuVwS~O?=uaiu8bV z$uHMjSImIkkDEue6L@}O>deM%SM!~ZZ|95xf6tf$5yd;hZ$N%io+i-_w56fZtquylxy1L1c-bSzD+!+lEHvldL{? z%K)9aB&SXTehFG3>t`ugFg%_CRr7^?vAJ8s#&~4lQ3S1@ujdCin-1% z9zP9y@+A;(vtCt){$oIK6iL;1f2!E!sCuAw&>7x)<4wG$$)MyqX) zcZVD1y*>&lkz2BAHHvF3Byk&d~ z(f0h(T!90&l>uqNLf7{RD$P75WUco^?vJQSa$I8Wrw}^TH9sj~?V$ildvMY3ayow> zJHl-i0R5o&V+cMJsey$x3iRJ*GIBQJn#kdw7JfmV7d_;KF7}j-28}{X{Q>LM*q{pS z(QfBRjCdTS?;wm)6&PUl9tDEziPO^jodrzM9xbRm`%P{=`3d6a11ik)>gQGPCTHJyL^L zR0uZ>sb7}lN3oi_akx7?-)|jz1+iOw*s4mxfIdGoU92-WRJNMAYqeNA;A-I0 z?`>!@3gZG!lmTWtrpKDU=PzXQ?!IMp9@y(hi^8vr`N$Bj$@86T$4_a&6W)QB*=tCK zO|JkzF=O?m1-41!{_sdwzqc=(>-fVpHmq3u&FBI6gs8y?B14dLX+BxN)@IJ1q_{C; z%`(>FjQ-cIg*sR_evg#=2eP~)F{!0RPZ2BIg{oE~L9cuV*8<#4$F7Qu^*MWLP(EvS z-$1o%vj4A@`FgB7*f5iyo}I8_@3QS89)z+-$XQ5F_H{ZUTzUlJnSwW0Y~zdeeXZt{b<6~8B_SJ#j` zQK{B3Hi>_M6zEDB zKyiikjOw2aW!pk}1jT8^eG|HO5Elfq87w2tAKN?udC9EgQ{UB)pXwf<{g|d{dDQRL zz^<`XEE$cc{0PZ1np;+d=pkgE?{C0l6c78gd8C zuKo;lO#YF+INzfbF7T$z6>2YCN4_AdBcPmv zsy})X0k_1*-}kM&pKt6$lmWcwsMx(-gpD60XfWi@vb{Frcw2T%oDz2?02pc+IwX03 zI08I~4@o~e_c(XV%-C0i`+fFHN8dpp(P5}FI+ly{JAi!1c=yLo(-O22zDTE-x3Kn#0VGql5H2S1PSi6C}tAg!*L zSi3!@8#Fht1=$HRFOBTnq^m@Wo(SWvYARys6@yk7Iits^WuAx!;SLLC|(9tf1Mk?iF%Qxim)fCLwZY zA&kpE(^XWZGB3r766tUcJa6m2DR>u9ED2H%`q^rKBIA zZ}j`_Dn;~R9b=pujdIdx1C}5KxL7i9ri@Vy@6UXlFUp1LpsjZHvY=HbxXVZISOh&8 znzgS0Z}wBwD@r`bHl+xG{4SysYM@u-$%-OaHVvHD;E3FJ@eus*#PKH@Ct}WVX8G{} z8q$dmmb1^#x|nS2(I)rPG^13}7sPCLj@w94^}`KgWA9nx*SBgSJx`37*m4#&E|63D zsAYG3t`H#0w2x8#J9RZ>dzDB_g!ZUkIM^A*QcrfR>KsBe0u|hQ9TIXxFF~t2EzEy- z`Fv{4Fzn-+TuZrlmclrD+0c(qXs~uB-QaX)z&-g#3<)C~L}(-cj-a#q<~M|Yz(3TP zxC6c$b;rExG%tE(??uYvViM`Eg67Dc-65xTGYTAbr^+9o?VoY$fQexRRwe>eiqjw6 zp)0XUKUwz7Fo)aYr|)jQXqL2`!wh%VJAD&>X~NC+XPhvYQc zG>CLFG(!&(Qqn0U-OVuY9e)4k|Gw`Nzh`}G%^GGc&e`Yey|4S;_rBxWy|fK!(FMHD zLlYMb4CO)_Z)aT7PCvc2|$ zc3DIT2x36&4v|-H;SfIk@57nQJ8oOgkzNgea9VZ!|5XnhU_J6t|Ru<8_{V&+NL|a8*H(NEYJ6u)PhQLJWHa1 z7rH*8S1aWFaq*9k)t__=OxeHz7-dqljW)aYXKw@K1*%?+jAav-6?8i zm~BGkFIUDL9chez6MIpHO)5ba<;u^Y2n7O-H ziHve;)6)LwL;>@Dn>JlGFQoa4TziI4hpw`-_yxN}q_0^}hRrwbfe9cy>NO?W*V6Fl zh%Uw#(u=-&m@Y-=_Zx+N#2-h(ir~_`!`Lcb9y`(_)!z#f^%2eBG9Hzb4v&PE$N7xK zLIf_?TQ8iX!CzE$tVEGV#MrrbQpeYw@>ner{@F=nBg&GYinr0(oc=%XRq?argE`-K z-B!*X8@~vz@T2>jE#B@LOEx0D?7p)S!Rfa3YwY(r(bx4la((;-{KLTI^A|A$6IZE)zxG4cd|6IHBG4$P0Ta}J#MeeR%w^Vr}~8oF{Q^| z!SKp)9OUk85G3eCp0Ch2fmrDjdD`Dipkv+C`P?CvF66AYD8cj?8Z4xdKV7kI-s&2v z?7OBnL=jsXtzQ@mx1rJ(5bX#RJq|H}nH zY;mW~V~=-|lNHolT?>26S;{pjofYg$-nFUQrJ`u)cax%vW{2-1-sQ}_*fpS~H85oZ z;#D;)*K;cgr#Gha2V^^b_w#p5Z5W+e-rkPjG>%b0$TCz$&+v4e~$V6JJ}@y&e%y;WF_Vp(H6f)=4wxz#=ZXMWRlJ2aA30LPzYk1c{u$1;{Z_ZWErKo(tu`J_Y7i39pMQO+?$O#|GAjmF7;sqc+Q!0HA*e<3 zCoDBo;V);^t07#bpOzHiv*B2)ID=FP@l7$(gmZHRGE$aCatm~OmUMr30|gVMNc`wI z8d;J^zZ{K$td;&g`W@j#tzqNQ7raB2wBrV&l;?U)P4{QzvxH%wtJc`EI|SR9db@a!jYxvRt&!Z zn2Lm9Frdwzi*ff3Ft@1t&ryeRZwl|W?RJ;d&9fE-p6Z&W26D{{S_xyMn~3DGQd zfyt)rgv=9P0^DQ^c*N;%PA3Em3B&0HR@OP-D9cxPf_%MafGML_VcroT)?OMgT5dhW zjcy*=h~1ERn1)e)-bsceW@}(i3F2ic2=WbU`u!xZFmg$&;zaEjKTSo#pIDNGjU?*s*7K)Q_9{B9quvUo4}DbF}59nL-U zdt%C|m$pgLxih(~MlfJ=d;3k~^2Tze(&AMkV(ehc!T(3(@WueQc%!UQ4}zDJtE~w! zS)|x;8$bSpVzLiAgkVwie8vn>$zFSmZ5xB+>ron-7gw zOT)tQGg#$93yocl!qq-x9NJ7F8F$QnbHVQkmgJ*_9b=asCQ}@MFN;2@Ng^l_du)ap zIZ*fE^5ZsDlGBvD1+izh>leZOux9(^lOTU?24QzwPU(wjjdK;%W@z}FavQ%=rpKA6 zcBN&}+(pciw9GIW>LfCwo4g`B2B@F=% zZ@aD0vKsO8mLU1HNY?$NK9*94@#g0AGSB6G)AH*W$Zn7Ox;>Nzb2#sOMs7&VjW&yb zb!zb{L4<3Cog9n)I;CQF*IO~>?vmFc$POsP9ZxfgbRskeU#=%bG4xu&FlZ!+Tg_*< zW(lm_Ft2}lgat;;Y$gJXeu0a5OS$JDN*oR#QokJ~k?&vC9&)tf0893?TWe0$T=HN( z>EAi{XaGU(4Ti*jZ}Jfuu|CZvNTDEgTWGtl<$9T1ksHh^j}=To-SQ`~U^33WO{~)F z^gVBzA-fk?RQ+b4ki@%fSmU&YJnJ}9yeSHgJ6}VKM2*RA)uz|Gs3Ic2nn%)WWrxf7O z9|IL8-<0#v;-+s+Hk8CaTwIO&KTjIw$6ePv63!!t<7f-_rvNupvq6ebn=Ep(zzC1h z@y~7DxHjJ@tzT>ovkuXgzkm+?EQIQ6zbvog9K#xj3=iC&FHHF|N>1+C+jUh3c`r-Y zW>~hZ*Ao6hjH5AEDt|a)r(H^La>li?ba;Ha~W9|0$JC<=}SAKtnnVLfwW`xf6ikhGXk>$BZc`Q-5% zXaeo|`%7v?Oud55)!nA?;VrB8{OJ9~&=%7j#)hEXE6* zt34@5=S66t8vS!i=}!+SeNVn~zJ90i9>ZYCeOrD&>sn`s8&{2cXd-U}94yvX-ch?G zdo#IwLl=enwW?`r04qx~Xnk62PKA5CKyDEWdK#qx$uVOzrAPXAPpP&Q9?K?qQIlI^ z!3W_=ZRRKIv*A%+zA#a}r_0J9A@yZ%)Fl%lbDQL`uerr_RV8<*GBrV4mD{ONeFa{o zkbiGyn3EI(E3<}zSV<^Z6cEVe#yK@t(+5xhmvzwhRx2^IgylwFFY3E zE-qERPAzA0)^9b~tZcKMfE&I0mL84w^p{K_geFz&?=v}GqAP3!{lVKKf5KI3WZ5|q zeB`jEYs%{oO_NMaYcgk(VaKU?d+qUK;L=U+d7OO{2zD8W8 z-@;vk1--Ygv`%3@CoTp7ltqzsv8Twjpd=YmzVnMO$%rax3vammu~++>I1_*F^Ac!I zNqrMTe_lQ3?{WA5Jjt8HXk_T)on^0DmM;uqoo_i>m47DJkldNv1ig(;+9t4RWbV2x zpKe8Qdc4;OEi<&}o{f6g!lhm>vu{{kF)Tkn$gumW7BF-^OjXcQ;X!YX*^ADo^0L+Z ztCS?Rd*%CXdsuSG%*ySpudGz=Dj(vSn5aVxeWmg&JISHsxbZl<>i8(%=$#=N9ToJj^HOX*9TS=qc&uMd=`47YP-u zsp2V`-0GJ~`=6f3u;izzWKyPT55T}0l8%jY^kG5i8^5%^b_3t`ANm?w&!)-(vEbGe z3S9W}!}-$C>pbzrEX`Y4mh)T#3&XRRX_yu7hWYKqACC(He|H_OD#T`1H%7M#7ss>G zA^ljA#Ji(zo2r$Gm6?gHrsmA>o)F69rSk@Pmt%+h!_igo%zX-9PaUn6kE!Ir6W6oM zlA;|bcPdIcT8++$%I^#Ht**Ylr@AJaUv(RvAs%kN4sw!2BWRJSuH8K7f5^W-$@$Gh zyHhN{-wFTWDhgyG|@k zWXnh*MufiQt-ERC#_f|^Nle{F6;mt zIEYG<^7KT*FyxzAyl8gCLw~2|uPNlUge7Gkqn6b0 zZMNQN;u)C&*K0$+v%@Uy{At$!MjCULhuikOHS#(YsYa#cge>fn1)Lf%9JrNXl@`kR z*u%X5%XqSp7!VfrCo*d!HTwkZq_c9;+>+#j>bfoFtD@X0X#HXm(_$hkD2=qWDfUpY z>>pSa*ZPtuHRarj4fmiYI_K1?Po8u``uR8ys_wh$mB#eSb5NlLljr=vHJ*jhsMh0g zUjy0i(8#$?Sa$3YHVX(wsF~~p8v<|%68=hho)bdzRrM7!Y(A;lq;tEdt(mt%E<(Ni zW?TCUbk~r0vNvhEG(G~SFb}SHZt|zZFNnL}Z@fEjjK|PP{D_xDZ*Gth5C4R(jF!s*WfR__H?i>@fb8HenR zP)RQt{0*ysnETJ3VA#U%5+bG3U#K^d#g)r9n;i~p{hjrsdqOi-gQybNdUH?*CAekNtUo7OM3HXdQNZs+)T3Yt12kpPgg

1msd825YGRpnB^iP>@|3w0v} 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

  • 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 literal 0 HcmV?d00001 diff --git a/web/migrations/versions/84700139beb0_.py b/web/migrations/versions/84700139beb0_.py new file mode 100644 index 0000000..455fd3d --- /dev/null +++ b/web/migrations/versions/84700139beb0_.py @@ -0,0 +1,32 @@ + +"""empty message + +Revision ID: 84700139beb0 +Revises: d39482714a2e +Create Date: 2020-06-24 15:53:56.489518 + +""" +from pgadmin.model import db + + +# revision identifiers, used by Alembic. +revision = '84700139beb0' +down_revision = 'd39482714a2e' +branch_labels = None +depends_on = None + + +def upgrade(): + db.engine.execute(""" + CREATE TABLE "database" ( + "id" INTEGER NOT NULL, + "schema_res" TEXT, + "server" INTEGER NOT NULL, + PRIMARY KEY("id","server"), + FOREIGN KEY("server") REFERENCES "server"("id") + ); + """) + + +def downgrade(): + pass diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 2745e5c..ca6cb8b 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -536,7 +536,7 @@ class ServerNode(PGChildNodeView): if connected: for arg in ( - 'host', 'hostaddr', 'port', 'db', 'username', 'sslmode', + 'hostaddr', 'db', 'sslmode', 'role', 'service' ): if arg in data: @@ -1016,6 +1016,7 @@ class ServerNode(PGChildNodeView): # Connect the Server manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) + manager.update(server) conn = manager.connection() # Get enc key diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index df0e668..935c279 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -32,7 +32,7 @@ from pgadmin.utils.driver import get_driver from pgadmin.tools.sqleditor.utils.query_history import QueryHistory from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry -from pgadmin.model import Server +from pgadmin.model import db, Server, Database class DatabaseModule(CollectionNodeModule): @@ -423,6 +423,11 @@ class DatabaseView(PGChildNodeView): ) status, res1 = self.conn.execute_dict(SQL) + database = Database.query.filter_by(id=did, server=sid).first() + + if database: + result['schema_res'] = database.schema_res.split( + ',') if database.schema_res else [] if not status: return internal_server_error(errormsg=res1) @@ -611,6 +616,11 @@ class DatabaseView(PGChildNodeView): return internal_server_error(errormsg=res) response = res['rows'][0] + # Add database entry into database table with schema_restrictions. + database = Database(id=response['did'], server=sid, + schema_res=','.join(data['schema_res'])) + db.session.add(database) + db.session.commit() return jsonify( node=self.blueprint.generate_browser_node( @@ -627,24 +637,46 @@ class DatabaseView(PGChildNodeView): ) ) - @check_precondition(action='update') - def update(self, gid, sid, did): - """Update the database.""" + @staticmethod + def _update_db_schema_res(data, did, sid): + database = Database.query.filter_by(id=did, server=sid).first() + if 'schema_res' in data: + if database: + data['schema_res'] = ','.join(data['schema_res']) + setattr(database, 'schema_res', data['schema_res']) + else: + database_obj = Database(id=did, server=sid, + schema_res=','.join(data['schema_res'])) + db.session.add(database_obj) - data = request.form if request.form else json.loads( - request.data, encoding='utf-8' - ) + def _check_rename_db_or_change_table_space(self, data, conn, all_ids): - # Generic connection for offline updates - conn = self.manager.connection(conn_id='db_offline_update') - status, errmsg = conn.connect() - if not status: - current_app.logger.error( - "Could not create database connection for offline updates\n" - "Err: {0}".format(errmsg) - ) - return internal_server_error(errmsg) + for action in ["rename_database", "tablespace"]: + sql = self.get_offline_sql(all_ids['gid'], all_ids['sid'], data, + all_ids['did'], action) + sql = sql.strip('\n').strip(' ') + if sql and sql != "": + status, msg = conn.execute_scalar(sql) + if not status: + # In case of error from server while rename it, + # reconnect to the database with old name again. + self.conn = self.manager.connection( + database=data['old_name'], auto_reconnect=True + ) + status, errmsg = self.conn.connect() + if not status: + current_app.logger.error( + 'Could not reconnected to database(#{0}).\n' + 'Error: {1}'.format(all_ids['did'], errmsg) + ) + return True, msg + QueryHistory.update_history_dbname( + current_user.id, all_ids['sid'], data['old_name'], + data['name']) + return False, '' + + def _fetch_db_details(self, data, did): if did is not None: # Fetch the name of database for comparison status, rset = self.conn.execute_dict( @@ -654,7 +686,7 @@ class DatabaseView(PGChildNodeView): ) ) if not status: - return internal_server_error(errormsg=rset) + return True, rset if len(rset['rows']) == 0: return gone( @@ -664,33 +696,9 @@ class DatabaseView(PGChildNodeView): data['old_name'] = (rset['rows'][0])['name'] if 'name' not in data: data['name'] = data['old_name'] + return False, '' - # Release any existing connection from connection manager - # to perform offline operation - self.manager.release(did=did) - - for action in ["rename_database", "tablespace"]: - SQL = self.get_offline_sql(gid, sid, data, did, action) - SQL = SQL.strip('\n').strip(' ') - if SQL and SQL != "": - status, msg = conn.execute_scalar(SQL) - if not status: - # In case of error from server while rename it, - # reconnect to the database with old name again. - self.conn = self.manager.connection( - database=data['old_name'], auto_reconnect=True - ) - status, errmsg = self.conn.connect() - if not status: - current_app.logger.error( - 'Could not reconnected to database(#{0}).\n' - 'Error: {1}'.format(did, errmsg) - ) - return internal_server_error(errormsg=msg) - - QueryHistory.update_history_dbname( - current_user.id, sid, data['old_name'], data['name']) - # Make connection for database again + def _reconnect_connect_db(self, data, did): if self._db['datallowconn']: self.conn = self.manager.connection( database=data['name'], auto_reconnect=True @@ -702,12 +710,71 @@ class DatabaseView(PGChildNodeView): 'Could not connected to database(#{0}).\n' 'Error: {1}'.format(did, errmsg) ) - return internal_server_error(errmsg) + return True, errmsg + return False, '' - SQL = self.get_online_sql(gid, sid, data, did) - SQL = SQL.strip('\n').strip(' ') - if SQL and SQL != "": - status, msg = self.conn.execute_scalar(SQL) + def _commit_db_changes(self, res, can_drop): + if self.manager.db == res['name']: + can_drop = False + + try: + db.session.commit() + except Exception as e: + current_app.logger.exception(e) + return True, e.message, False + return False, '', can_drop + + def _get_data_from_request(self): + return request.form if request.form else json.loads( + request.data, encoding='utf-8' + ) + + + @check_precondition(action='update') + def update(self, gid, sid, did): + """Update the database.""" + + data = self._get_data_from_request() + # Update schema restriction in db object. + DatabaseView._update_db_schema_res(data, did, sid) + + # Generic connection for offline updates + conn = self.manager.connection(conn_id='db_offline_update') + status, errmsg = conn.connect() + if not status: + current_app.logger.error( + "Could not create database connection for offline updates\n" + "Err: {0}".format(errmsg) + ) + return internal_server_error(errmsg) + + fetching_error, err_msg = self._fetch_db_details(data, did) + if fetching_error: + return internal_server_error(errormsg=err_msg) + + # Release any existing connection from connection manager + # to perform offline operation + self.manager.release(did=did) + all_ids = { + 'gid': gid, + 'sid': sid, + 'did': did + } + is_error, errmsg = self._check_rename_db_or_change_table_space(data, + conn, + all_ids) + if is_error: + return internal_server_error(errmsg) + + # Make connection for database again + connection_error, errmsg = self._reconnect_connect_db(data, did) + if connection_error: + return internal_server_error(errmsg) + + sql = self.get_online_sql(gid, sid, data, did) + sql = sql.strip('\n').strip(' ') + if sql and sql != "": + status, msg = self.conn.execute_scalar(sql) if not status: return internal_server_error(errormsg=msg) @@ -733,9 +800,15 @@ class DatabaseView(PGChildNodeView): res = rset['rows'][0] - can_drop = can_dis_conn = True - if self.manager.db == res['name']: - can_drop = can_dis_conn = False + can_drop = True + error, errmsg, is_can_drop = self._commit_db_changes(res, can_drop) + if error: + return make_json_response( + success=0, + errormsg=errmsg + ) + + can_drop = can_dis_conn = is_can_drop return jsonify( node=self.blueprint.generate_browser_node( diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py index e3c32e3..943e9df 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py @@ -24,6 +24,7 @@ from pgadmin.utils.ajax import make_json_response, internal_server_error, \ make_response as ajax_response, gone, bad_request from pgadmin.utils.driver import get_driver from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry +from pgadmin.model import Database """ This module is responsible for generating two nodes @@ -384,10 +385,21 @@ class SchemaView(PGChildNodeView): Returns: JSON of available schema nodes """ + database = Database.query.filter_by(id=did, server=sid).first() + param = None + if database: + schema_restrictions = database.schema_res + + if schema_restrictions: + schema_res = ",".join( + ["'%s'"] * len(schema_restrictions.split(','))) + param = schema_res % (tuple(schema_restrictions.split(','))) + SQL = render_template( "/".join([self.template_path, 'sql/properties.sql']), _=gettext, - show_sysobj=self.blueprint.show_system_objects + show_sysobj=self.blueprint.show_system_objects, + schema_restrictions=param ) status, res = self.conn.execute_dict(SQL) @@ -413,11 +425,22 @@ class SchemaView(PGChildNodeView): JSON of available schema child nodes """ res = [] + database = Database.query.filter_by(id=did, server=sid).first() + param = None + if database: + schema_restrictions = database.schema_res + + if schema_restrictions: + schema_res = ",".join( + ["'%s'"] * len(schema_restrictions.split(','))) + param = schema_res % (tuple(schema_restrictions.split(','))) + SQL = render_template( "/".join([self.template_path, 'sql/nodes.sql']), show_sysobj=self.blueprint.show_system_objects, _=gettext, - scid=scid + scid=scid, + schema_restrictions=param ) status, rset = self.conn.execute_2darray(SQL) @@ -428,10 +451,9 @@ class SchemaView(PGChildNodeView): if scid is not None: if len(rset['rows']) == 0: - return gone(gettext(""" -Could not find the schema in the database. -It may have been removed by another user. -""")) + return gone(gettext( + """Could not find the schema in the database. + It may have been removed by another user.""")) row = rset['rows'][0] return make_json_response( data=self.blueprint.generate_browser_node( @@ -896,10 +918,9 @@ It may have been removed by another user. return internal_server_error(errormsg=res) if len(res['rows']) == 0: - return gone(gettext(""" -Could not find the schema in the database. -It may have been removed by another user. -""")) + return gone(gettext( + """Could not find the schema in the database. + It may have been removed by another user.""")) data = res['rows'][0] backend_support_keywords = kwargs.copy() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/nodes.sql index d1a19d1..3cf6647 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/nodes.sql @@ -17,4 +17,10 @@ WHERE NOT ( {{ CATALOGS.LIST('nsp') }} ) + + {% if schema_restrictions %} + AND + nsp.nspname in ({{schema_restrictions}}) + {% endif %} + ORDER BY nspname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/properties.sql index e07626d..f340623 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/9.2_plus/sql/properties.sql @@ -50,4 +50,8 @@ WHERE NOT ( {{ CATALOGS.LIST('nsp') }} ) + {% if schema_restrictions %} + AND + nsp.nspname in ({{schema_restrictions}}) + {% endif %} ORDER BY 1, nspname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js index affa368..779f3e0 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js @@ -46,6 +46,7 @@ define('pgadmin.node.database', [ node_image: function() { return 'pg-icon-database'; }, + width: '700px', Init: function() { /* Avoid mulitple registration of menus */ if (this.initialized) @@ -297,6 +298,7 @@ define('pgadmin.node.database', [ defseqacl: [], is_template: false, deftypeacl: [], + schema_res:'', }, // Default values! @@ -310,150 +312,189 @@ define('pgadmin.node.database', [ pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); }, - schema: [{ - id: 'name', label: gettext('Database'), cell: 'string', - editable: false, type: 'text', - },{ - id: 'did', label: gettext('OID'), cell: 'string', mode: ['properties'], - editable: false, type: 'text', - },{ - id: 'datowner', label: gettext('Owner'), - editable: false, type: 'text', node: 'role', - control: Backform.NodeListByNameControl, select2: { allowClear: false }, - },{ - id: 'acl', label: gettext('Privileges'), type: 'text', - group: gettext('Security'), mode: ['properties'], - },{ - id: 'tblacl', label: gettext('Default TABLE privileges'), type: 'text', - group: gettext('Security'), mode: ['properties'], - },{ - id: 'seqacl', label: gettext('Default SEQUENCE privileges'), type: 'text', - group: gettext('Security'), mode: ['properties'], - },{ - id: 'funcacl', label: gettext('Default FUNCTION privileges'), type: 'text', - group: gettext('Security'), mode: ['properties'], - },{ - id: 'typeacl', label: gettext('Default TYPE privileges'), type: 'text', - group: gettext('Security'), mode: ['properties'], min_version: 90200, - },{ - id: 'is_sys_obj', label: gettext('System database?'), - cell:'boolean', type: 'switch', mode: ['properties'], - },{ - id: 'comments', label: gettext('Comment'), - editable: false, type: 'multiline', - },{ - id: 'encoding', label: gettext('Encoding'), - editable: false, type: 'text', group: gettext('Definition'), - readonly: function(m) { return !m.isNew(); }, url: 'get_encodings', - control: 'node-ajax-options', cache_level: 'server', - },{ - id: 'template', label: gettext('Template'), - editable: false, type: 'text', group: gettext('Definition'), - readonly: function(m) { return !m.isNew(); }, - control: 'node-list-by-name', url: 'get_databases', cache_level: 'server', - select2: { allowClear: false }, mode: ['create'], - transform: function(data, cell) { - var res = [], - control = cell || this, - label = control.model.get('name'); - - if (!control.model.isNew()) { - res.push({label: label, value: label}); - } - else { - if (data && _.isArray(data)) { - _.each(data, function(d) { - res.push({label: d, value: d, - image: 'pg-icon-database'}); - }); + schema: [ + { + id: 'name', label: gettext('Database'), cell: 'string', + editable: false, type: 'text', + },{ + id: 'did', label: gettext('OID'), cell: 'string', mode: ['properties'], + editable: false, type: 'text', + },{ + id: 'datowner', label: gettext('Owner'), + editable: false, type: 'text', node: 'role', + control: Backform.NodeListByNameControl, select2: { allowClear: false }, + },{ + id: 'acl', label: gettext('Privileges'), type: 'text', + group: gettext('Security'), mode: ['properties'], + },{ + id: 'tblacl', label: gettext('Default TABLE privileges'), type: 'text', + group: gettext('Security'), mode: ['properties'], + },{ + id: 'seqacl', label: gettext('Default SEQUENCE privileges'), type: 'text', + group: gettext('Security'), mode: ['properties'], + },{ + id: 'funcacl', label: gettext('Default FUNCTION privileges'), type: 'text', + group: gettext('Security'), mode: ['properties'], + },{ + id: 'typeacl', label: gettext('Default TYPE privileges'), type: 'text', + group: gettext('Security'), mode: ['properties'], min_version: 90200, + },{ + id: 'is_sys_obj', label: gettext('System database?'), + cell:'boolean', type: 'switch', mode: ['properties'], + },{ + id: 'comments', label: gettext('Comment'), + editable: false, type: 'multiline', + },{ + id: 'encoding', label: gettext('Encoding'), + editable: false, type: 'text', group: gettext('Definition'), + readonly: function(m) { return !m.isNew(); }, url: 'get_encodings', + control: 'node-ajax-options', cache_level: 'server', + },{ + id: 'template', label: gettext('Template'), + editable: false, type: 'text', group: gettext('Definition'), + readonly: function(m) { return !m.isNew(); }, + control: 'node-list-by-name', url: 'get_databases', cache_level: 'server', + select2: { allowClear: false }, mode: ['create'], + transform: function(data, cell) { + var res = [], + control = cell || this, + label = control.model.get('name'); + + if (!control.model.isNew()) { + res.push({label: label, value: label}); } - } - return res; - }, - },{ - id: 'spcname', label: gettext('Tablespace'), - editable: false, type: 'text', group: gettext('Definition'), - control: 'node-list-by-name', node: 'tablespace', - select2: { allowClear: false }, - filter: function(m) { - return (m.label != 'pg_global'); - }, - },{ - id: 'datcollate', label: gettext('Collation'), - editable: false, type: 'text', group: gettext('Definition'), - readonly: function(m) { return !m.isNew(); }, url: 'get_ctypes', - control: 'node-ajax-options', cache_level: 'server', - },{ - id: 'datctype', label: gettext('Character type'), - editable: false, type: 'text', group: gettext('Definition'), - readonly: function(m) { return !m.isNew(); }, url: 'get_ctypes', - control: 'node-ajax-options', cache_level: 'server', - },{ - id: 'datconnlimit', label: gettext('Connection limit'), - editable: false, type: 'int', group: gettext('Definition'), min: -1, - },{ - id: 'is_template', label: gettext('Template?'), - editable: false, type: 'switch', group: gettext('Definition'), - readonly: true, mode: ['properties', 'edit'], - },{ - id: 'datallowconn', label: gettext('Allow connections?'), - editable: false, type: 'switch', group: gettext('Definition'), - mode: ['properties'], - },{ - id: 'datacl', label: gettext('Privileges'), type: 'collection', - model: pgBrowser.Node.PrivilegeRoleModel.extend({ - privileges: ['C', 'T', 'c'], - }), uniqueCol : ['grantee', 'grantor'], editable: false, - group: gettext('Security'), mode: ['edit', 'create'], - canAdd: true, canDelete: true, control: 'unique-col-collection', - },{ - id: 'variables', label: '', type: 'collection', - model: pgBrowser.Node.VariableModel.extend({keys:['name', 'role']}), editable: false, - group: gettext('Parameters'), mode: ['edit', 'create'], - canAdd: true, canEdit: false, canDelete: true, hasRole: true, - control: Backform.VariableCollectionControl, node: 'role', - },{ - id: 'seclabels', label: gettext('Security labels'), - model: pgBrowser.SecLabelModel, - editable: false, type: 'collection', canEdit: false, - group: gettext('Security'), canDelete: true, - mode: ['edit', 'create'], canAdd: true, - control: 'unique-col-collection', uniqueCol : ['provider'], - min_version: 90200, - },{ - type: 'nested', control: 'tab', group: gettext('Default Privileges'), - mode: ['edit'], - schema:[{ - id: 'deftblacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( - {privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']}), label: '', - editable: false, type: 'collection', group: gettext('Tables'), - mode: ['edit', 'create'], control: 'unique-col-collection', - canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + else { + if (data && _.isArray(data)) { + _.each(data, function(d) { + res.push({label: d, value: d, + image: 'pg-icon-database'}); + }); + } + } + return res; + }, + },{ + id: 'spcname', label: gettext('Tablespace'), + editable: false, type: 'text', group: gettext('Definition'), + control: 'node-list-by-name', node: 'tablespace', + select2: { allowClear: false }, + filter: function(m) { + return (m.label != 'pg_global'); + }, + },{ + id: 'datcollate', label: gettext('Collation'), + editable: false, type: 'text', group: gettext('Definition'), + readonly: function(m) { return !m.isNew(); }, url: 'get_ctypes', + control: 'node-ajax-options', cache_level: 'server', + },{ + id: 'datctype', label: gettext('Character type'), + editable: false, type: 'text', group: gettext('Definition'), + readonly: function(m) { return !m.isNew(); }, url: 'get_ctypes', + control: 'node-ajax-options', cache_level: 'server', },{ - id: 'defseqacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( - {privileges: ['r', 'w', 'U']}), label: '', - editable: false, type: 'collection', group: gettext('Sequences'), - mode: ['edit', 'create'], control: 'unique-col-collection', - canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + id: 'datconnlimit', label: gettext('Connection limit'), + editable: false, type: 'int', group: gettext('Definition'), min: -1, },{ - id: 'deffuncacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( - {privileges: ['X']}), label: '', - editable: false, type: 'collection', group: gettext('Functions'), - mode: ['edit', 'create'], control: 'unique-col-collection', - canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + id: 'is_template', label: gettext('Template?'), + editable: false, type: 'switch', group: gettext('Definition'), + readonly: true, mode: ['properties', 'edit'], },{ - id: 'deftypeacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( - {privileges: ['U']}), label: '', - editable: false, type: 'collection', group: 'deftypesacl_group', - mode: ['edit', 'create'], control: 'unique-col-collection', - canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + id: 'datallowconn', label: gettext('Allow connections?'), + editable: false, type: 'switch', group: gettext('Definition'), + mode: ['properties'], + },{ + id: 'datacl', label: gettext('Privileges'), type: 'collection', + model: pgBrowser.Node.PrivilegeRoleModel.extend({ + privileges: ['C', 'T', 'c'], + }), uniqueCol : ['grantee', 'grantor'], editable: false, + group: gettext('Security'), mode: ['edit', 'create'], + canAdd: true, canDelete: true, control: 'unique-col-collection', + },{ + id: 'variables', label: '', type: 'collection', + model: pgBrowser.Node.VariableModel.extend({keys:['name', 'role']}), editable: false, + group: gettext('Parameters'), mode: ['edit', 'create'], + canAdd: true, canEdit: false, canDelete: true, hasRole: true, + control: Backform.VariableCollectionControl, node: 'role', + },{ + id: 'seclabels', label: gettext('Security labels'), + model: pgBrowser.SecLabelModel, + editable: false, type: 'collection', canEdit: false, + group: gettext('Security'), canDelete: true, + mode: ['edit', 'create'], canAdd: true, + control: 'unique-col-collection', uniqueCol : ['provider'], min_version: 90200, },{ - id: 'deftypesacl_group', type: 'group', label: gettext('Types'), - mode: ['edit', 'create'], min_version: 90200, + type: 'nested', control: 'tab', group: gettext('Default Privileges'), + mode: ['edit'], + schema:[{ + id: 'deftblacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( + {privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']}), label: '', + editable: false, type: 'collection', group: gettext('Tables'), + mode: ['edit', 'create'], control: 'unique-col-collection', + canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + },{ + id: 'defseqacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( + {privileges: ['r', 'w', 'U']}), label: '', + editable: false, type: 'collection', group: gettext('Sequences'), + mode: ['edit', 'create'], control: 'unique-col-collection', + canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + },{ + id: 'deffuncacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( + {privileges: ['X']}), label: '', + editable: false, type: 'collection', group: gettext('Functions'), + mode: ['edit', 'create'], control: 'unique-col-collection', + canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + },{ + id: 'deftypeacl', model: pgBrowser.Node.PrivilegeRoleModel.extend( + {privileges: ['U']}), label: '', + editable: false, type: 'collection', group: 'deftypesacl_group', + mode: ['edit', 'create'], control: 'unique-col-collection', + canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor'], + min_version: 90200, + },{ + id: 'deftypesacl_group', type: 'group', label: gettext('Types'), + mode: ['edit', 'create'], min_version: 90200, + }, + ], + },{ + type: 'collection', group: gettext('Advanced'), + }, + { + id: 'schema_res', label: gettext('Schema restriction'), + type: 'select2', group: gettext('Advanced'), + mode: ['properties', 'edit', 'create'], + select2: { + multiple: true, allowClear: false, tags: true, + tokenSeparators: [','], first_empty: false, + selectOnClose: true, emptyOptions: true, + }, + control: Backform.Select2Control.extend({ + onChange: function() { + Backform.Select2Control.prototype.onChange.apply(this, arguments); + if (!this.model || !( + this.model.changed && + this.model.get('oid') !== undefined + )) { + this.model.inform_text = undefined; + return; + } + + if(this.model.origSessAttrs.schema_res != this.model.changed.schema_res) + { + this.model.inform_text = gettext( + 'Please refresh the Schemas node to make changes to the schema restriction take effect.' + ); + } else { + this.model.inform_text = undefined; + } + }, + }), + }, + { + id: 'note', label: gettext('Note: Changes to the schema restriction will require the Schemas node in the browser to be refreshed before they will be shown.'), + group: gettext('Advanced'), type: 'help', + mode: ['edit', 'create'], }, - ], - }, ], validate: function() { var name = this.get('name'); diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py index ae861b1..0a40d79 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py @@ -41,7 +41,8 @@ class DatabasesUpdateTestCase(BaseTestGenerator): try: data = { "comments": "This is db update comment", - "id": self.db_id + "id": self.db_id, + "schema_res": ["public"] } response = self.tester.put( self.url + str(utils.SERVER_GROUP) + '/' + str( diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py index 8eeedf7..f44a81d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py @@ -73,7 +73,8 @@ def get_db_data(db_owner): "name": "db_add_%s" % str(uuid.uuid4())[1: 8], "privileges": [], "securities": [], - "variables": [] + "variables": [], + "schema_res": ["public", "sample"] } return data diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js index 240154c..37d3f16 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/server.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js @@ -39,7 +39,6 @@ define('pgadmin.node.server', [ }], validate: function() { this.errorModel.clear(); - if (_.isUndefined(this.get('label')) || _.isNull(this.get('label')) || String(this.get('label')).replace(/^\s+|\s+$/g, '') == '') { @@ -66,7 +65,6 @@ define('pgadmin.node.server', [ return d && d.connected; }, Init: function() { - /* Avoid multiple registration of same menus */ if (this.initialized) return; @@ -785,16 +783,70 @@ define('pgadmin.node.server', [ mode: ['properties', 'edit', 'create'], },{ id: 'host', label: gettext('Host name/address'), type: 'text', group: gettext('Connection'), - mode: ['properties', 'edit', 'create'], readonly: 'isConnected', + mode: ['properties', 'edit', 'create'], + control: Backform.InputControl.extend({ + onChange: function() { + Backform.InputControl.prototype.onChange.apply(this, arguments); + if (!this.model || !this.model.changed) { + this.model.inform_text = undefined; + return; + } + + if(this.model.origSessAttrs.host != this.model.changed.host && !this.model.isNew() && this.model.get('connected')) + { + this.model.inform_text = gettext( + 'To apply changes to the connection configuration, please disconnect from the server and then reconnect.' + ); + } else { + this.model.inform_text = undefined; + } + }, + }), },{ id: 'port', label: gettext('Port'), type: 'int', group: gettext('Connection'), - mode: ['properties', 'edit', 'create'], readonly: 'isConnected', min: 1, max: 65535, + mode: ['properties', 'edit', 'create'], min: 1, max: 65535, + control: Backform.InputControl.extend({ + onChange: function() { + Backform.InputControl.prototype.onChange.apply(this, arguments); + if (!this.model || !this.model.changed) { + this.model.inform_text = undefined; + return; + } + + if(this.model.origSessAttrs.port != this.model.changed.port && !this.model.isNew() && this.model.get('connected')) + { + this.model.inform_text = gettext( + 'To apply changes to the connection configuration, please disconnect from the server and then reconnect.' + ); + } else { + this.model.inform_text = undefined; + } + }, + }), },{ id: 'db', label: gettext('Maintenance database'), type: 'text', group: gettext('Connection'), mode: ['properties', 'edit', 'create'], readonly: 'isConnected', },{ id: 'username', label: gettext('Username'), type: 'text', group: gettext('Connection'), - mode: ['properties', 'edit', 'create'], readonly: 'isConnected', + mode: ['properties', 'edit', 'create'], + control: Backform.InputControl.extend({ + onChange: function() { + Backform.InputControl.prototype.onChange.apply(this, arguments); + if (!this.model || !this.model.changed) { + this.model.inform_text = undefined; + return; + } + + if(this.model.origSessAttrs.username != this.model.changed.username && !this.model.isNew() && this.model.get('connected')) + { + this.model.inform_text = gettext( + 'To apply changes to the connection configuration, please disconnect from the server and then reconnect.' + ); + } else { + this.model.inform_text = undefined; + } + }, + }), },{ id: 'password', label: gettext('Password'), type: 'password', maxlength: '2000', group: gettext('Connection'), control: 'input', mode: ['create'], deps: ['connect_now'], diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js index 7828b30..c42d24b 100644 --- a/web/pgadmin/browser/static/js/node.js +++ b/web/pgadmin/browser/static/js/node.js @@ -1339,6 +1339,21 @@ define('pgadmin.browser.node', [ } }.bind(panel), + informBeforeAttributeChange = function(ok_callback) { + var j = this.$container.find('.obj_properties').first(); + view = j && j.data('obj-view'); + + if (view && view.model && !_.isUndefined(view.model.inform_text) && !_.isNull(view.model.inform_text)) { + Alertify.alert( + gettext('Warning'), + gettext(view.model.inform_text) + ); + + } + ok_callback(); + return true; + }.bind(panel), + onSave = function(view, saveBtn) { var m = view.model, d = m.toJSON(true), @@ -1535,9 +1550,11 @@ define('pgadmin.browser.node', [ warnBeforeAttributeChange.call( panel, function() { - setTimeout(function() { - onSave.call(this, view, btn); - }, 0); + informBeforeAttributeChange.call(panel, function(){ + setTimeout(function() { + onSave.call(this, view, btn); + }, 0); + }); } ); }); diff --git a/web/pgadmin/model/__init__.py b/web/pgadmin/model/__init__.py index ab98583..03681e1 100644 --- a/web/pgadmin/model/__init__.py +++ b/web/pgadmin/model/__init__.py @@ -290,3 +290,18 @@ class QueryHistoryModel(db.Model): dbname = db.Column(db.String(), nullable=False, primary_key=True) query_info = db.Column(db.String(), nullable=False) last_updated_flag = db.Column(db.String(), nullable=False) + + +class Database(db.Model): + """ + Define a Database. + """ + __tablename__ = 'database' + id = db.Column(db.Integer, primary_key=True) + schema_res = db.Column(db.String(256), nullable=True) + server = db.Column( + db.Integer, + db.ForeignKey('server.id'), + nullable=False, + primary_key=True + )