我无法理解pgScript的需要,可以使用pgAdmin工具执行。应该什么时候使用? plpgSQL不能做什么呢?什么是相同的Microsoft SQL Server?
答案 0 :(得分:10)
pgScript是一种客户端脚本语言,而pl / PgSQL在服务器上运行。这意味着它们具有完全不同的用例。例如,PgScript可以管理事务状态,而pl / PgSQL则不能,但pl / Pgsql可用于扩展SQL的语言,而pgScript则不能这样做。
此外,这意味着两者将处理许多其他事情,从查询计划到动态SQL,而pgScript需要在查询之间往返,而pl / Pgsql不会。
答案 1 :(得分:2)
pgScript的一个用途是定义变量并在以后的SQL中使用它们。
例如,您可以执行以下操作:
package com.vcenter;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import com.vmware.vim25.VirtualMachineQuickStats;
import com.vmware.vim25.VirtualMachineSummary;
import com.vmware.vim25.mo.ClusterComputeResource;
import com.vmware.vim25.mo.Folder;
import com.vmware.vim25.mo.HostSystem;
import com.vmware.vim25.mo.InventoryNavigator;
import com.vmware.vim25.mo.ManagedEntity;
import com.vmware.vim25.mo.ServiceInstance;
import com.vmware.vim25.mo.VirtualMachine;
public class VCenterUtils {
private ServiceInstance serviceInstance = null;
public VCenterUtils(String url, String userName, String password) {
try {
serviceInstance = new ServiceInstance(new URL(url), userName, password, true);
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
private ManagedEntity[] getClusters() {
Folder rootFolder = null;
ManagedEntity[] entities = null;
rootFolder = serviceInstance.getRootFolder();
try {
entities = new InventoryNavigator(rootFolder).searchManagedEntities("ClusterComputeResource");
} catch (RemoteException e) {
e.printStackTrace();
}
return entities;
}
public List findVirtualMachines() {
List machineDTOs = new ArrayList();
ManagedEntity[] entities = getClusters();
ClusterComputeResource cluster = null;
if (entities.length > 0) {
for (ManagedEntity entity : entities) {
cluster = (ClusterComputeResource) entity;
HostSystem[] hosts = cluster.getHosts();
for(HostSystem host : hosts) {
VirtualMachine[] vms;
try {
vms = host.getVms();
for(VirtualMachine vm : vms) {
VirtualMachineDTO machineDTO = new VirtualMachineDTO();
machineDTO.setName(vm.getName());
machineDTO.setStatus(vm.getOverallStatus().name());
machineDTO.setState(vm.getSummary().getRuntime().getPowerState().name());
VirtualMachineSummary summary = vm.getSummary();
Double comittedSpace = Double.valueOf(summary.getStorage().getUncommitted())/1024/1024/1024;
Double uncomittedSpace = Double.valueOf(summary.getStorage().getUncommitted())/1024/1024/1024;
//calculating Provisioned Space of a virtual machine
Double provisionedSpace = comittedSpace + uncomittedSpace;
machineDTO.setProvisionedSpace(provisionedSpace);
machineDTO.setUsedSpace(comittedSpace);
VirtualMachineQuickStats virtualMachineQuickStats =summary.getQuickStats();
machineDTO.setHostCpu(virtualMachineQuickStats.getOverallCpuUsage());
machineDTO.setHostMemory(virtualMachineQuickStats.getHostMemoryUsage());
machineDTOs.add(machineDTO);
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
return machineDTOs;
}
}
这种方法只是让您想要在脚本顶部更改任何变量,而不是深入到复杂SQL查询中的那些变量。
当然,pgScript是一个仅在PgAdmin III客户端内可用的功能,例如在他的评论中提到的@ {Craig Ringer}。
答案 2 :(得分:-1)
我使用了Toad Data Modeler的DDL脚本生成器。
我在PgAdmin-III中使用普通查询执行来运行脚本,但它一直给我错误:
“错误:关系”用户“已存在SQL状态:42P07”。
我在 PgAdmin-III 中运行了Execute pgScript,它运行正常。