เป็นไปได้ไหม? ฉันสามารถระบุลงใน URL การเชื่อมต่อได้หรือไม่? ทำอย่างไร
เป็นไปได้ไหม? ฉันสามารถระบุลงใน URL การเชื่อมต่อได้หรือไม่? ทำอย่างไร
คำตอบ:
ฉันรู้ว่าคำตอบนี้ได้รับการตอบแล้ว แต่ฉันเพิ่งพบปัญหาเดียวกันกับที่พยายามระบุสกีมาที่จะใช้สำหรับบรรทัดคำสั่ง liquibase
อัพเดต ตั้งแต่วันที่ JDBC v 9.4คุณสามารถระบุ url ด้วยพารามิเตอร์ currentSchema ใหม่ดังนี้:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
ปรากฏขึ้นตามแพทช์ก่อนหน้า:
ซึ่งข้อเสนอของ url เป็นเช่นนั้น:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
วิธีJDCB หลังจากสร้างการเชื่อมต่อของคุณ ใช้งานได้สำหรับฉันด้วยไดรเวอร์ postgres เมื่อเร็ว ๆ นี้
postgresql-9.4.1209.jdbc42.jar
ทำงานร่วมกับ9.5
ฐานข้อมูลและ?currentSchema=myschema
ไวยากรณ์
ในเวอร์ชัน 9.4คุณสามารถใช้currentSchema
พารามิเตอร์ในสตริงการเชื่อมต่อของคุณ
ตัวอย่างเช่น:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
หากเป็นไปได้ในสภาพแวดล้อมของคุณคุณสามารถกำหนดสคีมาเริ่มต้นของผู้ใช้เป็นสคีมาที่คุณต้องการได้:
ALTER USER user_name SET search_path to 'schema'
ฉันไม่เชื่อว่ามีวิธีการระบุสคีมาในสตริงการเชื่อมต่อ ดูเหมือนว่าคุณจะต้องดำเนินการ
set search_path to 'schema'
หลังจากทำการเชื่อมต่อเพื่อระบุสคีมา
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
ฉันส่งแพตช์เวอร์ชั่นที่อัปเดตแล้วไปยังไดรเวอร์ PostgreSQL JDBC เพื่อให้ใช้งานได้ไม่กี่ปีมานี้ คุณจะต้องสร้างไดรเวอร์ PostreSQL JDBC จากแหล่ง (หลังจากเพิ่มในชุดข้อมูลแก้ไข) เพื่อใช้งาน:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
เมื่ออินสแตนซ์DataSource
การนำไปใช้งานให้ค้นหาวิธีการตั้งค่าสคีมาปัจจุบัน / เริ่มต้น
ยกตัวอย่างเช่นในการเรียกร้องระดับPGSimpleDataSource
setCurrentSchema
org.postgresql.ds.PGSimpleDataSource dataSource = new org.postgresql.ds.PGSimpleDataSource ( );
dataSource.setServerName ( "localhost" );
dataSource.setDatabaseName ( "your_db_here_" );
dataSource.setPortNumber ( 5432 );
dataSource.setUser ( "postgres" );
dataSource.setPassword ( "your_password_here" );
dataSource.setCurrentSchema ( "your_schema_name_here_" ); // <----------
หากคุณไม่ระบุสคีมาให้ Postgres มีค่าเริ่มต้นเป็นสคีมาที่มีชื่อpublic
อยู่ในฐานข้อมูล ดูคู่มือส่วน 5.9.2 ประชาชน Schema วิธีอ้างคู่มือหมวก:
ในส่วนก่อนหน้าเราสร้างตารางโดยไม่ระบุชื่อสกีมาใด ๆ โดยค่าเริ่มต้นตารางดังกล่าว (และวัตถุอื่น ๆ ) จะถูกใส่ลงใน schema ชื่อ "สาธารณะ" โดยอัตโนมัติ ทุกฐานข้อมูลใหม่จะมีสคีมาดังกล่าว
search_path
อย่าลืมSET SCHEMA 'myschema'
ว่าคุณสามารถใช้อะไรในแถลงการณ์แยกต่างหาก
SET SCHEMA 'value' เป็นนามแฝงสำหรับค่า SET search_path TO สามารถระบุได้เพียงหนึ่งสกีมาโดยใช้ไวยากรณ์นี้
และตั้งแต่ 9.4 และอาจเป็นเวอร์ชั่นก่อนหน้าบนไดร์เวอร์ JDBC จึงมีการรองรับsetSchema(String schemaName)
เมธอด
ใช้ Go กับ "sql.DB" (สังเกตsearch_path
ด้วยเครื่องหมายขีดเส้นใต้):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
สิ่งนี้ได้รับคำตอบแล้ว:
JDBC: PostgreSQL: // localhost: 5432 / mydatabase currentSchema = myschema
เช่นเดียวกับในคำตอบก่อนหน้าสตริงการเชื่อมต่อด้านบนใช้งานได้
ฉันได้ตรวจสอบแล้วและก็ตกลง: https://youtu.be/m0lBUHSLkNM?t=79
(แม้ว่าคำตอบที่ได้รับจะได้รับเมื่อ 8 ปีที่แล้ว แต่ถูกแก้ไขเมื่อ 1 ปีที่แล้ว)