zabbix界面zabbix服务器端运行中 显示为 不

zabbix安装完成后,发现server和agent服务都起来了,端口监听了,但是web界面zabbix服务器端运行中 为 不

打开浏览器 ,输入http://IP地址/zabbix/setup.php 回车
按照提示一步一步下来,填写数据用户名 密码等
最后一步会提示
已经完成后,进入到vim /etc/zabbix/web/ 如果是nginx,那么/usr/local/nginx/html/zabbix/conf/目下会有zabbix.conf.php 他会有提示你路径和文件名
vim zabbix.conf.php
在这里插入图片描述
如果还是no的状态的话,
由于我是centos7.4 关闭防火墙 和selinux 这两个问题排除

然后查看日志
vim /var/log/zabbix/zabbix_server.log

数据库授权语句
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@‘localhost’ identified by ‘zabbix’;
数据库zabbix的密码为zabbix,前面更改的zabbix_server.conf里面的DBPassword=zabbix,这两个一定要保持一致
find / -name “zabbix_server.conf”
/etc/zabbix/zabbix_server.conf
vim /etc/zabbix/zabbix_server.conf

重启服务
systemctl restart httpd.service
systemctl restart mariadb.service
systemctl restart zabbix-server.service

然后去web界面刷新一下页面发现ok了

QUERY_ALL_PACKAGES 权限的合规思考

App接入广告SDK播放视频广告,这类型广告一般会在视频中设置第三方引流App入口,通常会配置applist权限,对设备上所安装的软件包请求广泛的可见性权限,进而实现精准向用户引流未下载的软件包,或是用于数据统计、广告分析的目的。

应用通过从终端上全局查询的 已安装应用程序列表 ,如每款应用软件的名称、版本等, 为个人设备信息类别 属于用户的敏感个人信息

Android 11及更高版本(AndroidAPI 级别30及以上)的应用,引入了QUERY_ALL_PACKAGES 权限, 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式,不同于前述11版本以下的获取applist权限的方式,无法直接获取其他已安装应用程序列表,只能查询自己应用和系统应用的信息, 而非前述请求查看的 广 泛的 应用可见 性权限。

应用 使用QUERY_ALL_PACKAGES 权限时, 如果需要查询或与之交互的其他特定应用时,需要已集成该特定应用,或是使用某服务功能需与之特定应用交互的,才可以通过添加特定应用的软件包名至

<queries>元素内声明应用需提高软件包的可见性, 从而实现请求所必需的最小软件包的可见性权限,确保应用能够在最小权限范围内收集使用用户已安装应用程序列表的敏感信息,获取适当范围内的可见性权限(有限的可见性权限)。

但是,应用通过QUERY_ALL_PACKAGES 权限获取有限的可见性权限,仍然是有门槛的,且需进行隐私权限的合规审查。

Google Play 对于目标运行环境为 Android 11(API 级别 30)且请求获取 QUERY_ALL_PACKAGES 权限 的应用 ,新政策于 2022 年 7 月 1 日开始执行

如果Play 内的应用对QUERY_ALL_PACKAGES 权限的使用,在Google Play 政策允许范畴内, 应用需在清单中明确声明此权限且声明使用范围更具体的软件包可见性权限。 否则,应用通过QUERY_ALL_PACKAGES 权限收集已安装应用程序列表,并非是应用所涉的核心功能的以及与该权限启用发现的特定应用进行的互操作,即使应用进行了权限声明,也不符合Google Play 政策要求,应用将面临被Google Play下架。

Google Play 允许QUERY_ALL_PACKAGES 权限的使用情形涉及满足以下条件的应用:为了解相关情况或进行互操作(可能符合该权限的使用条件),必须发现设备上任何及所有已安装的应用。允许的使用情形包括:设备搜索、杀毒应用、文件管理器和浏览器。

如果 应用的某个可验证的核心用途涉及金融交易功能 (例如专用银行服务、专用数字钱包), Google Play 会允许该应用仅出于安全方面的目的而广泛地查询已安装的应用。

但是,在下述场景中 不允许使用 QUERY_ALL_PACKAGES  权限

  • 对该权限的使用与实现应用的核心用途并没有直接关系。
    • 此类使用情形包括点对点 (P2P) 分享。点对点分享只有在作为应用的核心用途的情况下,才属于允许的使用情形。
  • 获取数据是为了将其出售。
  • 无需非常广泛地查询应用安装情况就能完成目标任务。

此外,Google Play特别强调通过 Play分发的应用所查询的已安装应用程序列表数据不得出售,也不得分享给其他方来用于分析或广告获利目的。

Google Play限制应用的QUERY_ALL_PACKAGES 权限,尽可能地让应用遵循最小必要原则调用权限,获取用户个人信息,同时还可以帮助Play评估应用的隐私性和安全性,应用仅能在其显著声明的目的和范围内,以及征得用户同意的目的和范围内使用QUERY_ALL_PACKAGES 权限,对于没有核心功能或用途而查询其他应用安装情况的应用, Google Play 予以清退下架。

同理,依据《个人信息保护法》,除法定无需同意的情形除外,收集使用用户个人信息,应征得个人信息主体的同意,敏感信息应取得单独同意。

对于 Android 11(API 级别 30)运行环境,App或SDK配置了QUERY_ALL_PACKAGES 权限,查询已安装应用程序列表的敏感信息时,首先需考虑其配置此权限的正当、合理与必要性。

此权限是否涉及核心功能或者应用必须与之特定应用进行的互操作的合理必要场景,采取对个人权益影响最小权限的查看应用列表方式。其次,App或SDK在隐私政策中应明确告知QUERY_ALL_PACKAGES权限的方式、目的和范围,声明获取的特定已安装应用程序列表清单,且在特定场景时触发权限(如与特定应用进行互操作时),以弹窗或其他显著方式告知并征得用户的同意。

当然,配置了QUERY_ALL_PACKAGES 权限的应用,目前不参考上述声明与同意方式,也不太会导致App在应用市场上被下架或被通报整改。 对于 Android 11以下环境的App或SDK收集使用已安装应用程序列表的信息,目前主要通过隐私政策告知用户收集使用的目的、方式、范围和场景。但将来可能会渐趋于上述11以上的合规标准。

MongoDB Too many open files

MongoDB Too many open files, NETWORK  [listener] Error accepting new connection on 0.0.0.0:27017: Too many open files

If you are getting above error on Ubuntu 18.04/16.04 LTS or any other cloud platform like Amazon EC2, Azure VM, Google Cloud Compute, etc. with preinstalled Ubuntu.

Follow below steps to fix.

Linux systems limit the number of file descriptors for one process may open to 1024 per process.

Switch to root user

# sudo su

To Change temporarily or per session enter below command

# ulimit -n 102400

To change Permanently. To Change system limits, modify/etc/security/limits.conf,

# nano /etc/security/limits.conf

Add the below lines in it

* soft nofile 102400

* hard nofile 102400

Output:

# - chroot - change root to directory (Debian-specific)
#
#<domain> <type> <item> <value>
#

#* soft core 0
#root hard core 100000
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#ftp - chroot /ftp
#@student - maxlogins 4


* soft nofile 102400
* hard nofile 102400

# End of file

Ubuntu 16.04/18.04 uses systemd, You have to Change the ulimit settings in MongoDB service file

Navigate to /etc/systemd/system/ and open mongodb.service file

# cd /etc/systemd/system/
# nano mongodb.service

Add below lines as shown below.

[Unit]

Description=High-performance, schema-free document-oriented database

After=network.target

[Service]

User=mongodb

Group=mongodb

ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

LimitNOFILE=infinity

LimitNPROC=infinity

[Install]

WantedBy=multi-user.target

Reload to daemon to apply settings

# systemctl daemon-reload

Start the MongoDB Service

# systemctl start mongodb

Check the MongoDB Service

# systemctl status mongodb

Output:

  mongodb.service - High-performance, schema-free document-oriented database

   Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: enabled)

   Active: active (running)

 Main PID: 84070 (mongod)

    Tasks: 82

   Memory: 276.5M

      CPU: 53.064s

   CGroup: /system.slice/mongodb.service

           └─84070 /usr/bin/mongod --quiet --config /etc/mongod.conf

Related Articles:

How to Install MongoDB on Ubuntu 18.04/16.04 LTS

Reference:

https://docs.mongodb.com/manual/reference/ulimit/

Tags

Mongodb 崩溃报错 Too many open files的问题解析

Mongodb 崩溃报错 Too many open files的问题解析
在项目实际使用过程中,客户反馈能打开网页但无法登陆,第一时间感觉到应该是数据库服务器挂了,于是查看Mongodb数据库服务器日志,果不其然挂了,报错信息如下:

2020-12-28T13:21:21.731+0800 E STORAGE [conn2624] WiredTiger error (24) [1609132881:731616][23581:0x7fe157189700], WT_SESSION.create: __posix_directory_sync, 151: /data1/mongodb/data/db/collection-1063-1706476241051221735.wt: directory-sync: Too many open files Raw: [1609132881:731616][23581:0x7fe157189700], WT_SESSION.create: __posix_directory_sync, 151: /data1/mongodb/data/db/collection-1063-1706476241051221735.wt: directory-sync: Too many open files

1
2

问题原因:

系统打开文件数达到上限
造成如上问题的原因就是Centos7给每个用户默认的同时打开文件的数值是1024,可以通过ulitme -u 命令进行查看

1
2

问题解决:

1、修改 limits.conf 默认参数,在文件下新增如下内容:
* soft nofile 65536
* hard nofile 65536
PS:如上方法保存后,需要重启系统才能永久生效

2、动态修改(不需要重启系统及mongo)
2.1、查看mongodb服务pid文件
ps aux | grep mongo
2.2、获取pid文件后,查看对应pid limits,如下命令
cat /proc/95051/limits
2.3、运行如下命令,实现动态更改
prlimit –pid 95051 –nofile=65535:65535
2.4、再次查看,修改成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14

建议

建议新增服务器首先更改系统默认参数

Linux下开机自动启动FRP

Linux下开机自动启动FRP

前提已经安装frp,配置好了frps.ini(服务端)或者frpc.ini(客户端)

以下教程为frpc(客户端),frps只需要将frpc改为frps即可。

配置frpc.ini

参考frp配置说明

#打开frpc配置文件 
vim /usr/frp/frpc.ini

参考说明,进行配置

#frps服务端地址
server_addr = xxx.xxx.xxx.xxx
#frps服务端通讯端口,客户端连接到服务端内网穿透传输数据的端口
server_port = 7000
#特权模式密钥,客户端连接到FRPS服务端的验证密钥
privilege_token = JKSDF@341OKQ
#日志存放路径
log_file = frpc.log
#日志记录类别,可选:trace, debug, info, warn, error
log_level = info
#日志保存天数
log_max_days = 7
#设置为false,frpc连接frps失败后重连,默认为true不重连
login_fail_exit = false
#如连接报错,则去掉
#KCP协议在弱网环境下传输效率提升明显,但是对frps会有一些额外的流量消耗。服务端须先设置kcp_bind_port = 7000,freenat.bid服务端已设置支持
#protocol = kcp

[http_dsm]
#穿透服务名称,不能和其他已建立的相同,使用公共服务器的建议修改成复杂一点的名称,避免与其他人冲突,很多路由器内置frpc的默认服务名
称为[web],很容易很其他人冲突
#穿透协议类型,可选:tcp,udp,http,https,stcp,xtcp,这个设置之前必须自行搞清楚应该是什么
type = http
#本地监听IP,可以是本机IP,也可以是本地的局域网内某IP,例如你的局域网是互通的,你可以在路由器上安装frpc,然后local_ip填的群晖的ip,这样也可以把群晖穿透出去
local_ip = 192.168.1.2
#本地监听端口,通常有ssh端口22,远程桌面3389等等
local_port = 5000
#对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源
use_compression = true
#将 frpc 与 frps 之间的通信内容加密传输
use_encryption = true
#自定义域名访问穿透服务,一般域名设置了二级域名泛解析以后,这里填*.freenat.bid即可,*自定义,如果不想用域名或者自行搭建frps没有域名,则穿透协议类型选择tcp,见以下tcp部分详解
custom_domains = dsm.freenat.bid

配置systemctl进行开机启动

创建frpc.service服务

vim /lib/systemd/system/frpc.service
[Unit]
#服务描述
Description=frpc service 
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#执行命令 
ExecStart=/usr/local/frpc/frpc -c /usr/local/frpc/frpc.ini

[Install]
WantedBy=multi-user.target

!!!此处直接运行systemctl命令会提示需要重载!!!

于是终端里输入

systemctl daemon-reload  

使用systemctl命令来控制frpc

#启动
sudo systemctl start frpc 
#关闭
sudo systemctl stop frpc
#重启
sudo systemctl restart frpc
#查看状态
sudo systemctl status frpc

设置开机自动启动

sudo systemctl enable frpc

linux下FRP常用命令

后台运行frp

#定位至frp文件所在位置
服务端: nohup ./frps -c frps.ini >/dev/null 2>&1 &
客户端: nohup ./frpc -c frpc.ini >/dev/null 2>&1 &

查看frp进程

ps -aux|grep frp| grep -v grep

结束frp进程

kill -9 12345(找到的进程号)

macOS系统下配置FRP客户端并实现开机自启动

是的,你没看错,我脑子也没问题macOS系统下配置FRP客户端并实现开机自启动 今天要说说怎么在macOS系统下配置和使用FRP客户端,从而实现内网穿透,让我们可以随时随地的访问我们的macOSmacOS系统下配置FRP客户端并实现开机自启动

你一定想说,网上FRP的教程随便一搜都能找到一大堆,这还用你再说一遍?你这骗金币也骗的太没水平了macOS系统下配置FRP客户端并实现开机自启动

你就姑且当我是想骗一两个金币吧macOS系统下配置FRP客户端并实现开机自启动

好了,这次真的是要介绍在macOS下如何配置和使用FRP客户端,并且还为跟我一样懒的各位童鞋稍微介绍一下如何在macOS下实现FRP自启动,如果你喜欢每次登陆macOS后自己手动启动,然后留着一个“终端”窗口在那,下面将要说的的内容与你无关了macOS系统下配置FRP客户端并实现开机自启动

言归正传,要在macOS下配置和使用FRP,第一步当然就是去下载FRP的客户端程序了

以下内容均是假设你已经搭建有、或者白嫖到、或者跟别人共用着FRP服务端macOS系统下配置FRP客户端并实现开机自启动 反正就是有一个能正常使用的FRP服务器的前提下,如果没有FRP服务器,赶紧自个想办法整一个

首先让我们打开世界上最大的同macOS系统下配置FRP客户端并实现开机自启动macOS系统下配置FRP客户端并实现开机自启动macOS系统下配置FRP客户端并实现开机自启动 友网站GitHub,让我们进入这里下载与服务器对应的版本,mac下用的是darwin_amd64.tar.gz的。一定要注意,一定要选择与FRP服务端对应的版本,比如我一直用着v0.16.1的老版本,所以我只能找这个版本的darwin压缩包

接下来第二步,当然是把下载回来的文件解压到你喜欢的地方去,比如我就偷懒直接在Downloads里解压了macOS系统下配置FRP客户端并实现开机自启动

解压得到的文件,我偷懒就直接在Downloads里解压了解压得到的文件,我偷懒就直接在Downloads里解压了

解压好了我们进入解压出来的文件夹里编辑frpc.ini配置文件,如果你要使用frpc的更多功能的话,请自行编辑frpc_full.ini配置文件,GitHub有很详细的说明文档,这里就不多余介绍了macOS系统下配置FRP客户端并实现开机自启动

[common]
server_addr=xxx.xxx.xxx.xxx
server_port = 7000

[macOS VNC]
type = tcp
local_ip = 0.0.0.0
local_port = 5900
remote_port = 5900

[macOS SSH]
type = tcp
local_ip = 0.0.0.0
local_port = 22
remote_port = 5922

frpc.ini的配置跟Windows或者Linux下没什么区别,注意填上你正确的FRP服务器地址和端口就行了,上边代码里server_addr=xxx.xxx.xxx.xxx代表你的FRP服务器地址,server_port = 7000代表你FRP服务器的端口,千万别照抄我的macOS系统下配置FRP客户端并实现开机自启动 SSH默认的端口是22,VNC默认的端口是5900,如果你修改过,请填写正确的本地端口,remote_port则表示穿透到外网使用的端口,请确保在服务器的系统防火墙上放行了这些端口,且没有被其他程序占用,否则你是连不上的macOS系统下配置FRP客户端并实现开机自启动

配置好frpc.ini配置文件之后,让我们先./frpc -c frpc.ini执行以下,在外网试试看能不能穿透,能不能连进来,如果可以成功连上你的macOS,那就继续下一步,不行就查日志看看什么错误吧macOS系统下配置FRP客户端并实现开机自启动

好,接下来我们将进行最重要的一步操作,也就是第三步,让FRP客户端能开机后在后台自启动,不弹出任何的窗口或者终端

要实现macOS下程序的自启动,很多人都知道在“设置” – “用户和群组”中设置和取消开机启动,但这里要说的是另外一种方式,那就是launchd的方式,通过在launchd下编写plist启动文件实现FRP带参数启动。这里要啰嗦两句,在launchd下其实有两种实现程序自启的方式

1.如果需要 root,并且是需要用户登陆后才能运行,把 plist 放在 /Library/LaunchAgents/
2.如果需要 root,并且不需要用户登陆后都能运行,把 plist 放在 /Library/LaunchDaemons/

怎么理解呢,第一种就是系统启动后,你不登录到桌面,程序就不会在后台启动,类似于Windows下的开始菜单里的startup。第二种就是系统启动后,程序也随系统在后台启动,不管用户是否登录桌面,类似于Windows下的系统服务。你需要哪种方式让程序自启,自行选择第一种或者第二种。

出于安全的考虑或者说被迫害妄想症作怪macOS系统下配置FRP客户端并实现开机自启动 我不想完全把我的macOS暴露出去,我只选择了在/Library/LaunchAgents/创建plist

sudo vim ~/Library/LaunchAgents/frpc.plist

让我们用上面的命令创建FRP的启动文件frpc.plist,并用vim编辑它,你当然也可以用你自己喜欢的编辑器编辑macOS系统下配置FRP客户端并实现开机自启动

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version=”1.0″>
<dict>
<key>Label</key>
<string>frpc</string>
<key>ProgramArguments</key>
<array>
<string>/Users/xxxxxxxx/Downloads/frp_0.16.1_darwin_amd64/frpc</string>
<string>-c</string>
<string>/Users/xxxxxxxx/Downloads/frp_0.16.1_darwin_amd64/frpc.ini</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

将上面一段代码粘贴到frpc.plist里,粗体字部分请修改为你的frpc和frpc.ini的真实路径,千万别照抄作业哦,老师会发现的macOS系统下配置FRP客户端并实现开机自启动

最后,在终端输入下面的两段命令给frpc.plist赋予权限,并加载配置到系统使配置生效

sudo chown root ~/Library/LaunchAgents/frpc.plist
sudo launchctl load -w ~/Library/LaunchAgents/frpc.plist

好了,现在你可以重启系统,然后就会发现FRP客户端已经可以随系统自启了

打开活动监视器,可以看到frpc的后台进程

如果某一天你后悔了,不想让它自启了,只要在终端里输入下面的命令,下次FRP客户端就不会跟随你的系统自启了

sudo launchctl unload -w ~/Library/LaunchAgents/frpc.plist

ubuntu无法开机:timed out waiting for device dev-vdb1.device_Linux文件系统检查的依赖关系失败

今天给服务器安装了一个插件,然后重启服务器,结果提示timed out waiting for device dev-vdb1.device,发现是Linux文件系统检查的依赖关系失败了,想起来前几天把挂载的数据盘去掉了,开机自动挂载还在,接下来吾爱编程就为大家介绍一下Linux文件系统检查的依赖关系失败,有需要的小伙伴可以参考一下:

1、错误提示内容:

[ TIME ] Timed out waiting for device dev-vdb1.device.
[DEPEND] Dependecncy failed for /data.
[DEPEND] Dependecncy failed for Local File Systems.
......

 

2、解决办法:

(1)、根据提示进入系统:

Give root password for maintenace
(or press Control-D to continue):

输入自己的root密码进入系统

(2)、编辑开机自动挂载文件/etc/fstab,注释掉含有uuid的行:


保存文件,reboot重启服务器即可。

以上就是吾爱编程为大家介绍的Linux开机提示:timed out waiting for device dev-vdb1.device的解决方法。

npm 安装第三方插件(moment.js)

安装node.js
进入项目目录中打开cmd
npm init -y 安装完成后出package.json目录
npm install moment –save 安装完成后项目目录中出现node_modeles

 

目录结构如下

//页面引用
import moment from ‘moment’;
//methods使用
//moment(时间戳).format(‘生成什么格式’)
console.log(moment(new Date()).format(‘MM’)) // 获取月份
console.log(moment(new Date()).format(‘DD’)) // 获取日期

Virtualbox虚拟机安装win10系统卡顿

首先,当然是最基本的配置的

我的配置如下图所示,这个配置流畅运行64位windows毫无压力

 

cpu分配2-4个核心,内存分配4-8G,硬盘网络什么的根据需求设置即可

需要注意的是显卡控制器的设置

 

图形控制器分为VBOXVGA VMSVGA VBOXSVGA NONE

none顾名思义就是不使用图形,所以不会有任何的显示输出,需要通过远程控制使用

VBoxVGA:这个图形控制器用于旧版的操作系统,一般win7之前的版本常用

VMSVGA: 使用这里图形控制器来模拟 VMware SVGA图形设备

VBoxSVGA: 使用Linux或者win7及更高版本的系统使用的图形控制器,与VBoxVGA相比,提高了性能和3D支持

所以我们这里选择VBoxSVGA即可

 

以上配置完成之后,发现还是很卡,鼠标有粘滞感,不跟手,后来找资料发现virtualbox专门针对这类问题开发了增强插件

增强插件在设备里有个安装增强功能选项

 

点了之后,发现没有任何反应???

然后 发现在文件管理器中多了一个虚拟的CD驱动器

 

原来在这, 双击打开,安装VBoxWindowsAdditions

 

按提示步骤进行安装即可

 

安装完成后,发现操作起来真的是丝般顺滑
————————————————
版权声明:本文为CSDN博主「lanyu96」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wx_lanyu/article/details/105436154

Using GORM and Postgresql how to set the search_path?

Setting search_path by executing query like set search_path to newschema is incorrect way of setting, because this will be changed only for the connection that was used to execute the query.

To set it to full set of connection that your application will use you need to provide search_path as an argument to gorm.Open("postgres", "dbname=YourDB search_path=YourSearchPath") with all other connection arguments you gonna to use like dbname or port, user, etc.

 

FOUND how to display current schema by experimenting and a hint about Raw and Scan in PluralSite’s GORM class.

var currentSchema string
rows, err := db.Debug().Raw("show search_path").Rows()
rows.Next()  // to get the first and only result
rows.Scan(&currentSchema)
fmt.Printf("Search Path: %v\n", currentSchema)

returns: Search Path: “$user”, public

Taking @PavloStrokov point about transactions (which are basically threads and a transaction) into account, I was able to get the schema to stay during the current process. In the handler, I use the existing DB connection and create a transaction. It gets passed to every method that is called that touches the Database. I change the call to the gorm method to be the passed tx instead of the normal db variable that was stored and made available to any method that needed it.

The call I make to start it all of is:

tx := db.Begin()

tx.Exec(“set search_path to schema_name”)

The string is generated to use the proper Facility schema name.

The tx is the last param in the signature of all methods that touch the DB. For example func methiodUsingDBSchema(val1 string, val2 string, tx *gorm.DB){}

Then the last thing I do is tx.Commit() Even though these are all reads.

I have run all test and works well.

I use the Postgres schemas to separate Facilities in my application and need to change based upon the user logged in. All User and Facility information is in public.