在python脚本中,一个表被删除并重新创建,但是如果该表不存在则我注意到它会出错。
shp2pgsql = r"shp2pgsql -s 4135 -d "+path+" asmithe.bigtable "
psql = 'psql -U asmithe -h example.org -d xyz -c "ANALYZE asmithe.bigtable"'
subprocess.Popen(shp2pgsql +" | "+psql, shell=True).wait()
给出
ERROR: relation "asmithe.bigtable" does not exist
如何保护它以便如果表不存在则只创建它?
答案 0 :(得分:0)
-c
标志指示psql仅 使用-c之后的字符串作为命令。
为了证明:
#!/bin/sh
# This one fails; the pipe is never read
echo 'create TABLE omg (wtf integer NOT NULL);' \
| psql -U postgres -d postgres -c 'ANALYZE public.omg;'
# this one works; *only* the pipe (stdin) is read and executed
echo 'CREATE TABLE omg (wtf integer NOT NULL); ANALYZE public.omg; DROP TABLE public.omg;' \
| psql -U postgres -d postgres
答案 1 :(得分:0)
正如在另一个答案中所说,-c
选项导致psql无法读取管道。
为什么执行ANALYZE?在这个地方是错的。只需删除它:
shp2pgsql = r"shp2pgsql -s 4135 -d "+path+" asmithe.bigtable "
psql = 'psql -U asmithe -h example.org -d xyz'
subprocess.Popen(shp2pgsql +" | "+psql, shell=True).wait()