我希望从以下网址中删除所有的线条绘制字符:
PGPASSWORD="..." psql -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner
node_id | hostname | port | status | lb_weight | role
---------+---------------+------+--------+-----------+---------
0 | 10.20.30.40 | 5432 | 2 | 0.500000 | primary
1 | 10.20.30.41 | 5432 | 2 | 0.500000 | standby
(2 rows)
添加-t
选项会删除页眉和页脚,但竖线仍然存在:
PGPASSWORD="..." psql -t -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner
0 | 10.20.30.40 | 5432 | 2 | 0.500000 | primary
1 | 10.20.30.41 | 5432 | 2 | 0.500000 | standby
请注意,此问题特定于show pool_nodes
和其他类似的非select
SQL语句。
我目前的解决方法是涉及Linux cut
命令:
<previous command> | cut -d '|' -f 4
问题分为两部分:
psql
删除上面的竖条?psql
只显示特定列(例如status
)或列?例如,结果可能只有两行,每行显示数字2
。我在CentOS 7服务器上使用psql版本psql (PostgreSQL) 9.2.18
。
答案 0 :(得分:0)
对于脚本def get(self, request, *args, **kwargs):
# Process latitude and longitude coordinates from URL
coordinates = kwargs.pop('location', None).split(",")
latitude = coordinates[0]
longitude = coordinates[1]
# Retrieve the Location by latitude and longitude
location, created = Location.objects.get_or_create(latitude=latitude, longitude=longitude, defaults={'other': 'fields', 'to': 'add', 'on': 'create')
# Retrieve weather data.
forecast = get_weather(latitude, longitude)
currently = forecast['currently']
# Assign location.pk to currently data
currently['location'] = location.pk
# Serialize and confirm validity of data.
location_serializer = LocationSerializer(data=forecast)
if not location_serializer.is_valid():
return Response(location_serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
currently_serializer = CurrentlySerializer(data=currently)
if not currently_serializer.is_valid():
return Response(currently_serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
response = location_serializer.data + currently_serializer.data
return Response(response, status=status.HTTP_200_OK)
,请使用psql
:
psql -qAtX
uiet q
uples仅t
已签名输出A
(.psqlrc
)要过滤列,您必须在X
列表中对其进行命名。 SELECT
始终输出从服务器获取的完整结果集。例如。 psql
。
或者您可以SELECT status FROM pool_nodes
提取有序列号,例如
cut
(我不知道psql -qAtX -c 'whatever' | cut -d '|' -f 1,2-4
如何生成您在此处显示的输出,因为show pool_nodes
会返回单个标量值...)
要将分隔符从管道SHOW
更改为其他内容,请使用|
,例如-F
。但是要注意,分隔符在输出中出现时不会被转义,这不是CSV。您可能希望将选项卡视为有用选项;您必须输入带引号的文字标签才能执行此操作。 (如果在交互式shell中执行此操作,请搜索&#34;如何在bash中输入文字选项卡&#34;当您遇到困难时)。
给出虚拟数据显示以上所有内容的示例:
-F ','
查询,使用单个空格作为列分隔符(因此您最好不要在数据中包含空格!):
CREATE TABLE dummy_table (
a integer,
b integer,
c text,
d text
);
INSERT INTO dummy_table
VALUES
(1,1,'chicken','turkey'),
(2,2,'goat','cow'),
(3,3,'mantis','cricket');
如果由于某种原因您无法为SELECT生成列列表,则可以使用psql -qAtX -F ' ' -c 'SELECT a, b, d FROM dummy_table'
按列顺序进行过滤:
cut